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 @@