diff --git a/assets/controllers/result_filter_controller.js b/assets/controllers/result_filter_controller.js
index 4eabf6e..11e32f2 100644
--- a/assets/controllers/result_filter_controller.js
+++ b/assets/controllers/result_filter_controller.js
@@ -54,7 +54,6 @@ export default class extends Controller {
}
addLanguages(option, props) {
- console.log('herey');
const languages = Object.assign([], JSON.parse(props['languages']));
languages.forEach((language) => {
if (!this.languages.includes(language)) {
@@ -62,9 +61,22 @@ export default class extends Controller {
}
});
- this.languageTarget.innerHTML = '';
+ const preferred = this.languageTarget.dataset.preferred;
+ if (preferred) {
+ this.languageTarget.innerHTML = '';
+ this.languageTarget.innerHTML += '';
+ } else {
+ this.languageTarget.innerHTML = '';
+ }
+
this.languageTarget.innerHTML += this.languages.sort()
- .map((language) => '')
+ .map((language) => {
+ const preferred = this.languageTarget.dataset.preferred;
+ if (preferred === language) {
+ return '';
+ }
+ return '';
+ })
.join();
}
diff --git a/src/Torrentio/Result/ResultFactory.php b/src/Torrentio/Result/ResultFactory.php
index fc9950d..5a8bba7 100644
--- a/src/Torrentio/Result/ResultFactory.php
+++ b/src/Torrentio/Result/ResultFactory.php
@@ -3,6 +3,7 @@
namespace App\Torrentio\Result;
use App\Util\CountryCodes;
+use App\Util\CountryLanguages;
use Nihilarr\PTN;
class ResultFactory
@@ -89,13 +90,14 @@ class ResultFactory
});
$languages = array_map(function ($flag) {
- return CountryCodes::convertFromAbbr(strtoupper(substr($flag['short_name'], strlen('flag-'))));
+ return CountryLanguages::fromCountryCode(strtoupper(substr($flag['short_name'], strlen('flag-'))));
},
$flags);
+
if (count($languages) > 0) {
return array_values($languages);
} else {
- return ["English"];
+ return ["English (US)"];
}
}
diff --git a/src/User/Framework/Controller/Web/PreferencesController.php b/src/User/Framework/Controller/Web/PreferencesController.php
index 95d50aa..c6258a5 100644
--- a/src/User/Framework/Controller/Web/PreferencesController.php
+++ b/src/User/Framework/Controller/Web/PreferencesController.php
@@ -11,6 +11,7 @@ use App\User\Framework\Entity\User;
use App\User\Framework\Entity\UserPreference;
use App\User\Framework\Repository\PreferencesRepository;
use App\Util\CountryCodes;
+use App\Util\CountryLanguages;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\Response;
@@ -36,11 +37,14 @@ class PreferencesController extends AbstractController
$userPreferences = Map::from($userPreferences)
->rekey(fn($preference) => $preference->getPreference()->getId());
+ $languages = CountryLanguages::$languages;
+ sort($languages);
+
return $this->render(
'user/preferences.html.twig',
[
'preferences' => $this->preferencesRepository->findEnabled(),
- 'languages' => CountryCodes::$countries,
+ 'languages' => $languages,
'providers' => ['test' => 'Test'],
'userPreferences' => $userPreferences->toArray(),
]
@@ -55,11 +59,14 @@ class PreferencesController extends AbstractController
$userPreferences = $this->saveUserMediaPreferencesHandler->handle($input->toCommand())->userPreferences;
$userPreferences = Map::from($userPreferences)->rekey(fn($preference) => $preference->getPreference()->getId());
+ $languages = CountryLanguages::$languages;
+ sort($languages);
+
return $this->render(
'user/preferences.html.twig',
[
'preferences' => $this->preferencesRepository->findEnabled(),
- 'languages' => CountryCodes::$countries,
+ 'languages' => $languages,
'providers' => ['test' => 'Test'],
'userPreferences' => $userPreferences->toArray(),
]
diff --git a/src/Util/CountryLanguages.php b/src/Util/CountryLanguages.php
new file mode 100644
index 0000000..9369de2
--- /dev/null
+++ b/src/Util/CountryLanguages.php
@@ -0,0 +1,140 @@
+ 'English (US)',
+ 'GB' => 'English',
+ 'CA' => 'English', // Note: French is also official in parts of Canada
+ 'FR' => 'French',
+ 'DE' => 'German',
+ 'IT' => 'Italian',
+ 'ES' => 'Spanish',
+ 'MX' => 'Spanish',
+ 'BR' => 'Portuguese',
+ 'PT' => 'Portuguese',
+ 'CN' => 'Mandarin',
+ 'JP' => 'Japanese',
+ 'KR' => 'Korean',
+ 'RU' => 'Russian',
+ 'IN' => 'Hindi', // Note: India has multiple official languages
+ 'SA' => 'Arabic',
+ 'EG' => 'Arabic',
+ 'ZA' => 'English', // South Africa has 11 official languages
+ 'NG' => 'English',
+ 'AU' => 'English',
+ 'AR' => 'Spanish',
+ 'CH' => 'German', // Also French, Italian, Romansh
+ 'BE' => 'Dutch', // Also French and German
+ 'NL' => 'Dutch',
+ 'SE' => 'Swedish',
+ 'NO' => 'Norwegian',
+ 'DK' => 'Danish',
+ 'FI' => 'Finnish',
+ 'PL' => 'Polish',
+ 'TR' => 'Turkish',
+ 'IR' => 'Persian',
+ 'TH' => 'Thai',
+ 'VN' => 'Vietnamese',
+ 'ID' => 'Indonesian',
+ 'PK' => 'Urdu',
+ 'BD' => 'Bengali',
+ 'UA' => 'Ukrainian',
+ 'GR' => 'Greek',
+ 'IL' => 'Hebrew',
+ 'MY' => 'Malay',
+ 'PH' => 'Filipino',
+ 'KE' => 'English', // Also Swahili
+ ];
+
+ return $countryLanguages[$countryCode];
+ }
+
+ public static function fromCountryName(string $countryName): string
+ {
+ $countryLanguages = [
+ 'United States' => 'English (US)',
+ 'United Kingdom' => 'English',
+ 'Canada' => 'English', // French is also official
+ 'France' => 'French',
+ 'Germany' => 'German',
+ 'Italy' => 'Italian',
+ 'Spain' => 'Spanish',
+ 'Mexico' => 'Spanish',
+ 'Brazil' => 'Portuguese',
+ 'Portugal' => 'Portuguese',
+ 'China' => 'Mandarin',
+ 'Japan' => 'Japanese',
+ 'South Korea' => 'Korean',
+ 'Russia' => 'Russian',
+ 'India' => 'Hindi', // Also English and many regional languages
+ 'Saudi Arabia' => 'Arabic',
+ 'Egypt' => 'Arabic',
+ 'South Africa' => 'English', // One of 11 official languages
+ 'Nigeria' => 'English',
+ 'Australia' => 'English',
+ 'Argentina' => 'Spanish',
+ 'Switzerland' => 'German', // Also French, Italian, Romansh
+ 'Belgium' => 'Dutch', // Also French and German
+ 'Netherlands' => 'Dutch',
+ 'Sweden' => 'Swedish',
+ 'Norway' => 'Norwegian',
+ 'Denmark' => 'Danish',
+ 'Finland' => 'Finnish',
+ 'Poland' => 'Polish',
+ 'Turkey' => 'Turkish',
+ 'Iran' => 'Persian',
+ 'Thailand' => 'Thai',
+ 'Vietnam' => 'Vietnamese',
+ 'Indonesia' => 'Indonesian',
+ 'Pakistan' => 'Urdu',
+ 'Bangladesh' => 'Bengali',
+ 'Ukraine' => 'Ukrainian',
+ 'Greece' => 'Greek',
+ 'Israel' => 'Hebrew',
+ 'Malaysia' => 'Malay',
+ 'Philippines' => 'Filipino',
+ 'Kenya' => 'English', // Also Swahili
+ ];
+
+ return $countryLanguages[$countryName];
+ }
+}
diff --git a/templates/components/Filter.html.twig b/templates/components/Filter.html.twig
index 8a297c5..ccdd500 100644
--- a/templates/components/Filter.html.twig
+++ b/templates/components/Filter.html.twig
@@ -34,8 +34,13 @@