From 7419867078bfc0d77ea5b1683fbe7a839f149328 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Mon, 17 Apr 2023 02:10:17 +0000 Subject: [PATCH] new locale codes endpoint --- app/config/locale/codes.php | 581 +++++++++++++++--- app/config/locale/locales.php | 514 ---------------- app/controllers/api/locale.php | 25 +- app/controllers/general.php | 5 +- app/init.php | 91 +-- src/Appwrite/Utopia/Response.php | 5 + .../Utopia/Response/Model/LocaleCode.php | 47 ++ 7 files changed, 606 insertions(+), 662 deletions(-) delete mode 100644 app/config/locale/locales.php create mode 100644 src/Appwrite/Utopia/Response/Model/LocaleCode.php diff --git a/app/config/locale/codes.php b/app/config/locale/codes.php index feeebf975d..db400a1f3d 100644 --- a/app/config/locale/codes.php +++ b/app/config/locale/codes.php @@ -1,76 +1,513 @@ "af", + "name" => "Afrikaans", + ], + [ + "code" => "ar-ae", + "name" => "Arabic (U.A.E.)", + ], + [ + "code" => "ar-bh", + "name" => "Arabic (Bahrain)", + ], + [ + "code" => "ar-dz", + "name" => "Arabic (Algeria)", + ], + [ + "code" => "ar-eg", + "name" => "Arabic (Egypt)", + ], + [ + "code" => "ar-iq", + "name" => "Arabic (Iraq)", + ], + [ + "code" => "ar-jo", + "name" => "Arabic (Jordan)", + ], + [ + "code" => "ar-kw", + "name" => "Arabic (Kuwait)", + ], + [ + "code" => "ar-lb", + "name" => "Arabic (Lebanon)", + ], + [ + "code" => "ar-ly", + "name" => "Arabic (Libya)", + ], + [ + "code" => "ar-ma", + "name" => "Arabic (Morocco)", + ], + [ + "code" => "ar-om", + "name" => "Arabic (Oman)", + ], + [ + "code" => "ar-qa", + "name" => "Arabic (Qatar)", + ], + [ + "code" => "ar-sa", + "name" => "Arabic (Saudi Arabia)", + ], + [ + "code" => "ar-sy", + "name" => "Arabic (Syria)", + ], + [ + "code" => "ar-tn", + "name" => "Arabic (Tunisia)", + ], + [ + "code" => "ar-ye", + "name" => "Arabic (Yemen)", + ], + [ + "code" => "be", + "name" => "Belarusian", + ], + [ + "code" => "bg", + "name" => "Bulgarian", + ], + [ + "code" => "ca", + "name" => "Catalan", + ], + [ + "code" => "cs", + "name" => "Czech", + ], + [ + "code" => "cy", + "name" => "Welsh", + ], + [ + "code" => "da", + "name" => "Danish", + ], + [ + "code" => "de", + "name" => "German (Standard)", + ], + [ + "code" => "de-at", + "name" => "German (Austria)", + ], + [ + "code" => "de-ch", + "name" => "German (Switzerland)", + ], + [ + "code" => "de-li", + "name" => "German (Liechtenstein)", + ], + [ + "code" => "de-lu", + "name" => "German (Luxembourg)", + ], + [ + "code" => "el", + "name" => "Greek", + ], + [ + "code" => "en", + "name" => "English", + ], + [ + "code" => "en-au", + "name" => "English (Australia)", + ], + [ + "code" => "en-bz", + "name" => "English (Belize)", + ], + [ + "code" => "en-ca", + "name" => "English (Canada)", + ], + [ + "code" => "en-gb", + "name" => "English (United Kingdom)", + ], + [ + "code" => "en-ie", + "name" => "English (Ireland)", + ], + [ + "code" => "en-jm", + "name" => "English (Jamaica)", + ], + [ + "code" => "en-nz", + "name" => "English (New Zealand)", + ], + [ + "code" => "en-tt", + "name" => "English (Trinidad)", + ], + [ + "code" => "en-us", + "name" => "English (United States)", + ], + [ + "code" => "en-za", + "name" => "English (South Africa)", + ], + [ + "code" => "es", + "name" => "Spanish (Spain)", + ], + [ + "code" => "es-ar", + "name" => "Spanish (Argentina)", + ], + [ + "code" => "es-bo", + "name" => "Spanish (Bolivia)", + ], + [ + "code" => "es-cl", + "name" => "Spanish (Chile)", + ], + [ + "code" => "es-co", + "name" => "Spanish (Colombia)", + ], + [ + "code" => "es-cr", + "name" => "Spanish (Costa Rica)", + ], + [ + "code" => "es-do", + "name" => "Spanish (Dominican Republic)", + ], + [ + "code" => "es-ec", + "name" => "Spanish (Ecuador)", + ], + [ + "code" => "es-gt", + "name" => "Spanish (Guatemala)", + ], + [ + "code" => "es-hn", + "name" => "Spanish (Honduras)", + ], + [ + "code" => "es-mx", + "name" => "Spanish (Mexico)", + ], + [ + "code" => "es-ni", + "name" => "Spanish (Nicaragua)", + ], + [ + "code" => "es-pa", + "name" => "Spanish (Panama)", + ], + [ + "code" => "es-pe", + "name" => "Spanish (Peru)", + ], + [ + "code" => "es-pr", + "name" => "Spanish (Puerto Rico)", + ], + [ + "code" => "es-py", + "name" => "Spanish (Paraguay)", + ], + [ + "code" => "es-sv", + "name" => "Spanish (El Salvador)", + ], + [ + "code" => "es-uy", + "name" => "Spanish (Uruguay)", + ], + [ + "code" => "es-ve", + "name" => "Spanish (Venezuela)", + ], + [ + "code" => "et", + "name" => "Estonian", + ], + [ + "code" => "eu", + "name" => "Basque", + ], + [ + "code" => "fa", + "name" => "Farsi", + ], + [ + "code" => "fi", + "name" => "Finnish", + ], + [ + "code" => "fo", + "name" => "Faeroese", + ], + [ + "code" => "fr", + "name" => "French (Standard)", + ], + [ + "code" => "fr-be", + "name" => "French (Belgium)", + ], + [ + "code" => "fr-ca", + "name" => "French (Canada)", + ], + [ + "code" => "fr-ch", + "name" => "French (Switzerland)", + ], + [ + "code" => "fr-lu", + "name" => "French (Luxembourg)", + ], + [ + "code" => "ga", + "name" => "Irish", + ], + [ + "code" => "gd", + "name" => "Gaelic (Scotland)", + ], + [ + "code" => "he", + "name" => "Hebrew", + ], + [ + "code" => "hi", + "name" => "Hindi", + ], + [ + "code" => "hr", + "name" => "Croatian", + ], + [ + "code" => "hu", + "name" => "Hungarian", + ], + [ + "code" => "id", + "name" => "Indonesian", + ], + [ + "code" => "is", + "name" => "Icelandic", + ], + [ + "code" => "it", + "name" => "Italian (Standard)", + ], + [ + "code" => "it-ch", + "name" => "Italian (Switzerland)", + ], + [ + "code" => "ja", + "name" => "Japanese", + ], + [ + "code" => "ji", + "name" => "Yiddish", + ], + [ + "code" => "ko", + "name" => "Korean", + ], + [ + "code" => "ko", + "name" => "Korean (Johab)", + ], + [ + "code" => "ku", + "name" => "Kurdish", + ], + [ + "code" => "lt", + "name" => "Lithuanian", + ], + [ + "code" => "lv", + "name" => "Latvian", + ], + [ + "code" => "mk", + "name" => "Macedonian (FYROM)", + ], + [ + "code" => "ml", + "name" => "Malayalam", + ], + [ + "code" => "ms", + "name" => "Malaysian", + ], + [ + "code" => "mt", + "name" => "Maltese", + ], + [ + "code" => "nb", + "name" => "Norwegian (Bokmål)", + ], + [ + "code" => "nl", + "name" => "Dutch (Standard)", + ], + [ + "code" => "nl-be", + "name" => "Dutch (Belgium)", + ], + [ + "code" => "nn", + "name" => "Norwegian (Nynorsk)", + ], + [ + "code" => "no", + "name" => "Norwegian", + ], + [ + "code" => "pa", + "name" => "Punjabi", + ], + [ + "code" => "pl", + "name" => "Polish", + ], + [ + "code" => "pt", + "name" => "Portuguese (Portugal)", + ], + [ + "code" => "pt-br", + "name" => "Portuguese (Brazil)", + ], + [ + "code" => "rm", + "name" => "Rhaeto-Romanic", + ], + [ + "code" => "ro", + "name" => "Romanian", + ], + [ + "code" => "ro-md", + "name" => "Romanian (Republic of Moldova)", + ], + [ + "code" => "ru", + "name" => "Russian", + ], + [ + "code" => "ru-md", + "name" => "Russian (Republic of Moldova)", + ], + [ + "code" => "sb", + "name" => "Sorbian", + ], + [ + "code" => "sk", + "name" => "Slovak", + ], + [ + "code" => "sl", + "name" => "Slovenian", + ], + [ + "code" => "sq", + "name" => "Albanian", + ], + [ + "code" => "sr", + "name" => "Serbian", + ], + [ + "code" => "sv", + "name" => "Swedish", + ], + [ + "code" => "sv-fi", + "name" => "Swedish (Finland)", + ], + [ + "code" => "th", + "name" => "Thai", + ], + [ + "code" => "tn", + "name" => "Tswana", + ], + [ + "code" => "tr", + "name" => "Turkish", + ], + [ + "code" => "ts", + "name" => "Tsonga", + ], + [ + "code" => "ua", + "name" => "Ukrainian", + ], + [ + "code" => "ur", + "name" => "Urdu", + ], + [ + "code" => "ve", + "name" => "Venda", + ], + [ + "code" => "vi", + "name" => "Vietnamese", + ], + [ + "code" => "xh", + "name" => "Xhosa", + ], + [ + "code" => "zh-cn", + "name" => "Chinese (PRC)", + ], + [ + "code" => "zh-hk", + "name" => "Chinese (Hong Kong)", + ], + [ + "code" => "zh-sg", + "name" => "Chinese (Singapore)", + ], + [ + "code" => "zh-tw", + "name" => "Chinese (Taiwan)", + ], + [ + "code" => "zu", + "name" => "Zulu", + ], ]; diff --git a/app/config/locale/locales.php b/app/config/locale/locales.php deleted file mode 100644 index 484a24f36d..0000000000 --- a/app/config/locale/locales.php +++ /dev/null @@ -1,514 +0,0 @@ - "af", - "name" => "Afrikaans", - ], - [ - "code" => "ar-ae", - "name" => "Arabic (U.A.E.)", - ], - [ - "code" => "ar-bh", - "name" => "Arabic (Bahrain)", - ], - [ - "code" => "ar-dz", - "name" => "Arabic (Algeria)", - ], - [ - "code" => "ar-eg", - "name" => "Arabic (Egypt)", - ], - [ - "code" => "ar-iq", - "name" => "Arabic (Iraq)", - ], - [ - "code" => "ar-jo", - "name" => "Arabic (Jordan)", - ], - [ - "code" => "ar-kw", - "name" => "Arabic (Kuwait)", - ], - [ - "code" => "ar-lb", - "name" => "Arabic (Lebanon)", - ], - [ - "code" => "ar-ly", - "name" => "Arabic (Libya)", - ], - [ - "code" => "ar-ma", - "name" => "Arabic (Morocco)", - ], - [ - "code" => "ar-om", - "name" => "Arabic (Oman)", - ], - [ - "code" => "ar-qa", - "name" => "Arabic (Qatar)", - ], - [ - "code" => "ar-sa", - "name" => "Arabic (Saudi Arabia)", - ], - [ - "code" => "ar-sy", - "name" => "Arabic (Syria)", - ], - [ - "code" => "ar-tn", - "name" => "Arabic (Tunisia)", - ], - [ - "code" => "ar-ye", - "name" => "Arabic (Yemen)", - ], - [ - "code" => "be", - "name" => "Belarusian", - ], - [ - "code" => "bg", - "name" => "Bulgarian", - ], - [ - "code" => "ca", - "name" => "Catalan", - ], - [ - "code" => "cs", - "name" => "Czech", - ], - [ - "code" => "cy", - "name" => "Welsh", - ], - [ - "code" => "da", - "name" => "Danish", - ], - [ - "code" => "de", - "name" => "German (Standard)", - ], - [ - "code" => "de-at", - "name" => "German (Austria)", - ], - [ - "code" => "de-ch", - "name" => "German (Switzerland)", - ], - [ - "code" => "de-li", - "name" => "German (Liechtenstein)", - ], - [ - "code" => "de-lu", - "name" => "German (Luxembourg)", - ], - [ - "code" => "el", - "name" => "Greek", - ], - [ - "code" => "en", - "name" => "English", - ], - [ - "code" => "en-au", - "name" => "English (Australia)", - ], - [ - "code" => "en-bz", - "name" => "English (Belize)", - ], - [ - "code" => "en-ca", - "name" => "English (Canada)", - ], - [ - "code" => "en-gb", - "name" => "English (United Kingdom)", - ], - [ - "code" => "en-ie", - "name" => "English (Ireland)", - ], - [ - "code" => "en-jm", - "name" => "English (Jamaica)", - ], - [ - "code" => "en-nz", - "name" => "English (New Zealand)", - ], - [ - "code" => "en-tt", - "name" => "English (Trinidad)", - ], - [ - "code" => "en-us", - "name" => "English (United States)", - ], - [ - "code" => "en-za", - "name" => "English (South Africa)", - ], - [ - "code" => "es", - "name" => "Spanish (Spain)", - ], - [ - "code" => "es-ar", - "name" => "Spanish (Argentina)", - ], - [ - "code" => "es-bo", - "name" => "Spanish (Bolivia)", - ], - [ - "code" => "es-cl", - "name" => "Spanish (Chile)", - ], - [ - "code" => "es-co", - "name" => "Spanish (Colombia)", - ], - [ - "code" => "es-cr", - "name" => "Spanish (Costa Rica)", - ], - [ - "code" => "es-do", - "name" => "Spanish (Dominican Republic)", - ], - [ - "code" => "es-ec", - "name" => "Spanish (Ecuador)", - ], - [ - "code" => "es-gt", - "name" => "Spanish (Guatemala)", - ], - [ - "code" => "es-hn", - "name" => "Spanish (Honduras)", - ], - [ - "code" => "es-mx", - "name" => "Spanish (Mexico)", - ], - [ - "code" => "es-ni", - "name" => "Spanish (Nicaragua)", - ], - [ - "code" => "es-pa", - "name" => "Spanish (Panama)", - ], - [ - "code" => "es-pe", - "name" => "Spanish (Peru)", - ], - [ - "code" => "es-pr", - "name" => "Spanish (Puerto Rico)", - ], - [ - "code" => "es-py", - "name" => "Spanish (Paraguay)", - ], - [ - "code" => "es-sv", - "name" => "Spanish (El Salvador)", - ], - [ - "code" => "es-uy", - "name" => "Spanish (Uruguay)", - ], - [ - "code" => "es-ve", - "name" => "Spanish (Venezuela)", - ], - [ - "code" => "et", - "name" => "Estonian", - ], - [ - "code" => "eu", - "name" => "Basque", - ], - [ - "code" => "fa", - "name" => "Farsi", - ], - [ - "code" => "fi", - "name" => "Finnish", - ], - [ - "code" => "fo", - "name" => "Faeroese", - ], - [ - "code" => "fr", - "name" => "French (Standard)", - ], - [ - "code" => "fr-be", - "name" => "French (Belgium)", - ], - [ - "code" => "fr-ca", - "name" => "French (Canada)", - ], - [ - "code" => "fr-ch", - "name" => "French (Switzerland)", - ], - [ - "code" => "fr-lu", - "name" => "French (Luxembourg)", - ], - [ - "code" => "ga", - "name" => "Irish", - ], - [ - "code" => "gd", - "name" => "Gaelic (Scotland)", - ], - [ - "code" => "he", - "name" => "Hebrew", - ], - [ - "code" => "hi", - "name" => "Hindi", - ], - [ - "code" => "hr", - "name" => "Croatian", - ], - [ - "code" => "hu", - "name" => "Hungarian", - ], - [ - "code" => "id", - "name" => "Indonesian", - ], - [ - "code" => "is", - "name" => "Icelandic", - ], - [ - "code" => "it", - "name" => "Italian (Standard)", - ], - [ - "code" => "it-ch", - "name" => "Italian (Switzerland)", - ], - [ - "code" => "ja", - "name" => "Japanese", - ], - [ - "code" => "ji", - "name" => "Yiddish", - ], - [ - "code" => "ko", - "name" => "Korean", - ], - [ - "code" => "ko", - "name" => "Korean (Johab)", - ], - [ - "code" => "ku", - "name" => "Kurdish", - ], - [ - "code" => "lt", - "name" => "Lithuanian", - ], - [ - "code" => "lv", - "name" => "Latvian", - ], - [ - "code" => "mk", - "name" => "Macedonian (FYROM)", - ], - [ - "code" => "ml", - "name" => "Malayalam", - ], - [ - "code" => "ms", - "name" => "Malaysian", - ], - [ - "code" => "mt", - "name" => "Maltese", - ], - [ - "code" => "nb", - "name" => "Norwegian (Bokmål)", - ], - [ - "code" => "nl", - "name" => "Dutch (Standard)", - ], - [ - "code" => "nl-be", - "name" => "Dutch (Belgium)", - ], - [ - "code" => "nn", - "name" => "Norwegian (Nynorsk)", - ], - [ - "code" => "no", - "name" => "Norwegian", - ], - [ - "code" => "pa", - "name" => "Punjabi", - ], - [ - "code" => "pl", - "name" => "Polish", - ], - [ - "code" => "pt", - "name" => "Portuguese (Portugal)", - ], - [ - "code" => "pt-br", - "name" => "Portuguese (Brazil)", - ], - [ - "code" => "rm", - "name" => "Rhaeto-Romanic", - ], - [ - "code" => "ro", - "name" => "Romanian", - ], - [ - "code" => "ro-md", - "name" => "Romanian (Republic of Moldova)", - ], - [ - "code" => "ru", - "name" => "Russian", - ], - [ - "code" => "ru-md", - "name" => "Russian (Republic of Moldova)", - ], - [ - "code" => "sb", - "name" => "Sorbian", - ], - [ - "code" => "sk", - "name" => "Slovak", - ], - [ - "code" => "sl", - "name" => "Slovenian", - ], - [ - "code" => "sq", - "name" => "Albanian", - ], - [ - "code" => "sr", - "name" => "Serbian", - ], - [ - "code" => "sv", - "name" => "Swedish", - ], - [ - "code" => "sv-fi", - "name" => "Swedish (Finland)", - ], - [ - "code" => "th", - "name" => "Thai", - ], - [ - "code" => "tn", - "name" => "Tswana", - ], - [ - "code" => "tr", - "name" => "Turkish", - ], - [ - "code" => "ts", - "name" => "Tsonga", - ], - [ - "code" => "ua", - "name" => "Ukrainian", - ], - [ - "code" => "ur", - "name" => "Urdu", - ], - [ - "code" => "ve", - "name" => "Venda", - ], - [ - "code" => "vi", - "name" => "Vietnamese", - ], - [ - "code" => "xh", - "name" => "Xhosa", - ], - [ - "code" => "zh-cn", - "name" => "Chinese (PRC)", - ], - [ - "code" => "zh-hk", - "name" => "Chinese (Hong Kong)", - ], - [ - "code" => "zh-sg", - "name" => "Chinese (Singapore)", - ], - [ - "code" => "zh-tw", - "name" => "Chinese (Taiwan)", - ], - [ - "code" => "zu", - "name" => "Zulu", - ], -]; diff --git a/app/controllers/api/locale.php b/app/controllers/api/locale.php index 9c958fb080..9dfe44d4dc 100644 --- a/app/controllers/api/locale.php +++ b/app/controllers/api/locale.php @@ -19,12 +19,11 @@ App::get('/v1/locale') ->label('sdk.response.code', Response::STATUS_CODE_OK) ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) ->label('sdk.response.model', Response::MODEL_LOCALE) - ->label('sdk.offline.model', '/locale') + ->label('sdk.offline.model', '/locale/localeCodes') ->label('sdk.offline.key', 'current') ->inject('request') ->inject('response') ->inject('locale') - ->inject('geodb') ->action(function (Request $request, Response $response, Locale $locale, Reader $geodb) { $eu = Config::getParam('locale-eu'); $currencies = Config::getParam('locale-currencies'); @@ -68,6 +67,28 @@ App::get('/v1/locale') $response->dynamic(new Document($output), Response::MODEL_LOCALE); }); +App::get('/v1/locale/codes') + ->desc('Get Locale Codes') + ->groups(['api', 'locale']) + ->label('scope', 'locale.read') + ->label('sdk.auth', [APP_AUTH_TYPE_SESSION, APP_AUTH_TYPE_KEY, APP_AUTH_TYPE_JWT]) + ->label('sdk.namespace', 'locale') + ->label('sdk.method', 'getCodes') + ->label('sdk.description', '/docs/references/locale/get-locale-codes.md') + ->label('sdk.response.code', Response::STATUS_CODE_OK) + ->label('sdk.response.type', Response::CONTENT_TYPE_JSON) + ->label('sdk.response.model', Response::MODEL_LOCALE_CODE) + ->label('sdk.offline.model', '/locale') + ->label('sdk.offline.key', 'current') + ->inject('response') + ->action(function (Response $response) { + $codes = Config::getParam('locale-codes'); + $response->dynamic(new Document([ + 'localeCodes' => $codes, + 'total' => count($codes), + ]), Response::MODEL_LOCALE_CODE_LIST); + }); + App::get('/v1/locale/countries') ->desc('List Countries') ->groups(['api', 'locale']) diff --git a/app/controllers/general.php b/app/controllers/general.php index fe25f5c273..497e79ad32 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -49,9 +49,10 @@ App::init() ->inject('dbForConsole') ->inject('user') ->inject('locale') + ->inject('localeCodes') ->inject('clients') ->inject('servers') - ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients, array $servers) { + ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $localeCodes, array $clients, array $servers) { /* * Request format */ @@ -135,7 +136,7 @@ App::init() } $localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', '')); - if (\in_array($localeParam, Config::getParam('locale-codes'))) { + if (\in_array($localeParam, $localeCodes)) { $locale->setDefault($localeParam); } diff --git a/app/init.php b/app/init.php index 3f62b3a9a9..a26ea63aeb 100644 --- a/app/init.php +++ b/app/init.php @@ -661,78 +661,21 @@ $register->set('promiseAdapter', function () { * Localization */ Locale::$exceptions = false; -Locale::setLanguageFromJSON('af', __DIR__ . '/config/locale/translations/af.json'); -Locale::setLanguageFromJSON('ar', __DIR__ . '/config/locale/translations/ar.json'); -Locale::setLanguageFromJSON('as', __DIR__ . '/config/locale/translations/as.json'); -Locale::setLanguageFromJSON('az', __DIR__ . '/config/locale/translations/az.json'); -Locale::setLanguageFromJSON('be', __DIR__ . '/config/locale/translations/be.json'); -Locale::setLanguageFromJSON('bg', __DIR__ . '/config/locale/translations/bg.json'); -Locale::setLanguageFromJSON('bh', __DIR__ . '/config/locale/translations/bh.json'); -Locale::setLanguageFromJSON('bn', __DIR__ . '/config/locale/translations/bn.json'); -Locale::setLanguageFromJSON('bs', __DIR__ . '/config/locale/translations/bs.json'); -Locale::setLanguageFromJSON('ca', __DIR__ . '/config/locale/translations/ca.json'); -Locale::setLanguageFromJSON('cs', __DIR__ . '/config/locale/translations/cs.json'); -Locale::setLanguageFromJSON('da', __DIR__ . '/config/locale/translations/da.json'); -Locale::setLanguageFromJSON('de', __DIR__ . '/config/locale/translations/de.json'); -Locale::setLanguageFromJSON('el', __DIR__ . '/config/locale/translations/el.json'); -Locale::setLanguageFromJSON('en', __DIR__ . '/config/locale/translations/en.json'); -Locale::setLanguageFromJSON('eo', __DIR__ . '/config/locale/translations/eo.json'); -Locale::setLanguageFromJSON('es', __DIR__ . '/config/locale/translations/es.json'); -Locale::setLanguageFromJSON('fa', __DIR__ . '/config/locale/translations/fa.json'); -Locale::setLanguageFromJSON('fi', __DIR__ . '/config/locale/translations/fi.json'); -Locale::setLanguageFromJSON('fo', __DIR__ . '/config/locale/translations/fo.json'); -Locale::setLanguageFromJSON('fr', __DIR__ . '/config/locale/translations/fr.json'); -Locale::setLanguageFromJSON('ga', __DIR__ . '/config/locale/translations/ga.json'); -Locale::setLanguageFromJSON('gu', __DIR__ . '/config/locale/translations/gu.json'); -Locale::setLanguageFromJSON('he', __DIR__ . '/config/locale/translations/he.json'); -Locale::setLanguageFromJSON('hi', __DIR__ . '/config/locale/translations/hi.json'); -Locale::setLanguageFromJSON('hr', __DIR__ . '/config/locale/translations/hr.json'); -Locale::setLanguageFromJSON('hu', __DIR__ . '/config/locale/translations/hu.json'); -Locale::setLanguageFromJSON('hy', __DIR__ . '/config/locale/translations/hy.json'); -Locale::setLanguageFromJSON('id', __DIR__ . '/config/locale/translations/id.json'); -Locale::setLanguageFromJSON('is', __DIR__ . '/config/locale/translations/is.json'); -Locale::setLanguageFromJSON('it', __DIR__ . '/config/locale/translations/it.json'); -Locale::setLanguageFromJSON('ja', __DIR__ . '/config/locale/translations/ja.json'); -Locale::setLanguageFromJSON('jv', __DIR__ . '/config/locale/translations/jv.json'); -Locale::setLanguageFromJSON('kn', __DIR__ . '/config/locale/translations/kn.json'); -Locale::setLanguageFromJSON('km', __DIR__ . '/config/locale/translations/km.json'); -Locale::setLanguageFromJSON('ko', __DIR__ . '/config/locale/translations/ko.json'); -Locale::setLanguageFromJSON('la', __DIR__ . '/config/locale/translations/la.json'); -Locale::setLanguageFromJSON('lb', __DIR__ . '/config/locale/translations/lb.json'); -Locale::setLanguageFromJSON('lt', __DIR__ . '/config/locale/translations/lt.json'); -Locale::setLanguageFromJSON('lv', __DIR__ . '/config/locale/translations/lv.json'); -Locale::setLanguageFromJSON('ml', __DIR__ . '/config/locale/translations/ml.json'); -Locale::setLanguageFromJSON('mr', __DIR__ . '/config/locale/translations/mr.json'); -Locale::setLanguageFromJSON('ms', __DIR__ . '/config/locale/translations/ms.json'); -Locale::setLanguageFromJSON('nb', __DIR__ . '/config/locale/translations/nb.json'); -Locale::setLanguageFromJSON('ne', __DIR__ . '/config/locale/translations/ne.json'); -Locale::setLanguageFromJSON('nl', __DIR__ . '/config/locale/translations/nl.json'); -Locale::setLanguageFromJSON('nn', __DIR__ . '/config/locale/translations/nn.json'); -Locale::setLanguageFromJSON('or', __DIR__ . '/config/locale/translations/or.json'); -Locale::setLanguageFromJSON('pa', __DIR__ . '/config/locale/translations/pa.json'); -Locale::setLanguageFromJSON('pl', __DIR__ . '/config/locale/translations/pl.json'); -Locale::setLanguageFromJSON('pt-br', __DIR__ . '/config/locale/translations/pt-br.json'); -Locale::setLanguageFromJSON('pt-pt', __DIR__ . '/config/locale/translations/pt-pt.json'); -Locale::setLanguageFromJSON('ro', __DIR__ . '/config/locale/translations/ro.json'); -Locale::setLanguageFromJSON('ru', __DIR__ . '/config/locale/translations/ru.json'); -Locale::setLanguageFromJSON('sa', __DIR__ . '/config/locale/translations/sa.json'); -Locale::setLanguageFromJSON('sd', __DIR__ . '/config/locale/translations/sd.json'); -Locale::setLanguageFromJSON('si', __DIR__ . '/config/locale/translations/si.json'); -Locale::setLanguageFromJSON('sk', __DIR__ . '/config/locale/translations/sk.json'); -Locale::setLanguageFromJSON('sl', __DIR__ . '/config/locale/translations/sl.json'); -Locale::setLanguageFromJSON('sn', __DIR__ . '/config/locale/translations/sn.json'); -Locale::setLanguageFromJSON('sq', __DIR__ . '/config/locale/translations/sq.json'); -Locale::setLanguageFromJSON('sv', __DIR__ . '/config/locale/translations/sv.json'); -Locale::setLanguageFromJSON('ta', __DIR__ . '/config/locale/translations/ta.json'); -Locale::setLanguageFromJSON('te', __DIR__ . '/config/locale/translations/te.json'); -Locale::setLanguageFromJSON('th', __DIR__ . '/config/locale/translations/th.json'); -Locale::setLanguageFromJSON('tl', __DIR__ . '/config/locale/translations/tl.json'); -Locale::setLanguageFromJSON('tr', __DIR__ . '/config/locale/translations/tr.json'); -Locale::setLanguageFromJSON('uk', __DIR__ . '/config/locale/translations/uk.json'); -Locale::setLanguageFromJSON('ur', __DIR__ . '/config/locale/translations/ur.json'); -Locale::setLanguageFromJSON('vi', __DIR__ . '/config/locale/translations/vi.json'); -Locale::setLanguageFromJSON('zh-cn', __DIR__ . '/config/locale/translations/zh-cn.json'); -Locale::setLanguageFromJSON('zh-tw', __DIR__ . '/config/locale/translations/zh-tw.json'); + +$locales = Config::getParam('locale-codes', []); + +foreach($locales as $locale) { + $code = $locale['code']; + $path = __DIR__ . '/config/locale/translations/' . $code . '.json'; + + if(!\file_exists($path)) { + $path = __DIR__ . '/config/locale/translations/' . \substr($code, 0, 2) . '.json'; + } + + if(\file_exists($path)) { + Locale::setLanguageFromJSON($code, $path); + } +} \stream_context_set_default([ // Set global user agent and http settings 'http' => [ @@ -759,6 +702,10 @@ App::setResource('register', fn() => $register); App::setResource('locale', fn() => new Locale(App::getEnv('_APP_LOCALE', 'en'))); +App::setResource('localeCodes', function() { + return array_map(fn($locale) => $locale['code'], Config::getParam('locale-codes', [])); +}); + // Queues App::setResource('events', fn() => new Event('', '')); App::setResource('audits', fn() => new Audit()); diff --git a/src/Appwrite/Utopia/Response.php b/src/Appwrite/Utopia/Response.php index e3c80a9fa7..655a5d5746 100644 --- a/src/Appwrite/Utopia/Response.php +++ b/src/Appwrite/Utopia/Response.php @@ -73,6 +73,7 @@ use Appwrite\Utopia\Response\Model\HealthQueue; use Appwrite\Utopia\Response\Model\HealthStatus; use Appwrite\Utopia\Response\Model\HealthTime; use Appwrite\Utopia\Response\Model\HealthVersion; +use Appwrite\Utopia\Response\Model\LocaleCode; use Appwrite\Utopia\Response\Model\Mock; // Keep last use Appwrite\Utopia\Response\Model\Provider; use Appwrite\Utopia\Response\Model\Runtime; @@ -165,6 +166,8 @@ class Response extends SwooleResponse // Locale public const MODEL_LOCALE = 'locale'; + public const MODEL_LOCALE_CODE = 'localeCode'; + public const MODEL_LOCALE_CODE_LIST = 'localeCodeList'; public const MODEL_COUNTRY = 'country'; public const MODEL_COUNTRY_LIST = 'countryList'; public const MODEL_CONTINENT = 'continent'; @@ -284,6 +287,7 @@ class Response extends SwooleResponse ->setModel(new BaseList('Phones List', self::MODEL_PHONE_LIST, 'phones', self::MODEL_PHONE)) ->setModel(new BaseList('Metric List', self::MODEL_METRIC_LIST, 'metrics', self::MODEL_METRIC, true, false)) ->setModel(new BaseList('Variables List', self::MODEL_VARIABLE_LIST, 'variables', self::MODEL_VARIABLE)) + ->setModel(new BaseList('Locale codes list', self::MODEL_LOCALE_CODE_LIST, 'localeCodes', self::MODEL_LOCALE_CODE)) // Entities ->setModel(new Database()) ->setModel(new Collection()) @@ -316,6 +320,7 @@ class Response extends SwooleResponse ->setModel(new Token()) ->setModel(new JWT()) ->setModel(new Locale()) + ->setModel(new LocaleCode()) ->setModel(new File()) ->setModel(new Bucket()) ->setModel(new Team()) diff --git a/src/Appwrite/Utopia/Response/Model/LocaleCode.php b/src/Appwrite/Utopia/Response/Model/LocaleCode.php new file mode 100644 index 0000000000..e73ceff6a5 --- /dev/null +++ b/src/Appwrite/Utopia/Response/Model/LocaleCode.php @@ -0,0 +1,47 @@ +addRule('code', [ + 'type' => self::TYPE_STRING, + 'description' => 'Locale codes in [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)', + 'default' => '', + 'example' => 'en-us', + ]) + ->addRule('name', [ + 'type' => self::TYPE_STRING, + 'description' => 'Locale name', + 'default' => '', + 'example' => 'US', + ]) + ; + } + + /** + * Get Name + * + * @return string + */ + public function getName(): string + { + return 'LocaleCode'; + } + + /** + * Get Type + * + * @return string + */ + public function getType(): string + { + return Response::MODEL_LOCALE_CODE; + } +}