Лучшая практика: используйте languageCode или LanguageTag с многоязычным приложением

Итак, я последовал руководству по созданию многоязычного приложения React-Native. Теперь мое приложение определяет язык устройства, а затем сопоставляет его с переводами приложения. Однако в руководстве (а также в моем коде на данный момент) используется languageTag для сопоставления переводов.

Немецкий телефон будет de-DE, английский - en-US и т. Д. Как я понимаю, сначала это язык устройства, второй - это регион.

Итак, мои переводы настроены следующим образом;

I18n.translations = {
  default: en,
  'en-US': en,
  'nl-NL': nl,
  'fr-FR': fr,
  'de-DE': de
};

Однако немецкий телефон в США будет иметь languageTag de-US, это не будет соответствовать моему de-DE: de part, так что даже если телефон настроен на использование немецкого языка, потому что он находится в США, он не будет переводить на немецкий язык.

Что вы все предпочитаете? Теперь я подумываю использовать LanguageCode для проверки языка. Если languageCode - de, используйте немецкий перевод.

Будет ли причина против использования LanguageCode вместо LanguageTag?


person MarkT    schedule 01.06.2020    source источник


Ответы (1)


Сначала у вас должны быть параметры в данных REST Server.

Пример: для английского: https://example.com/en/home

try {
        URL url = new URL("https://example.com/en/home");
       BufferedInputStream bis = new BufferedInputStream(url.openStream());
       byte[] buffer = new byte[1024];
       StringBuilder sb = new StringBuilder();
       int bytesRead = 0;
       while((bytesRead = bis.read(buffer)) > 0) {
           String text = new String(buffer, 0, bytesRead);
           sb.append(text);
       }
       bis.close();

     return sb.toString();
    } catch (Exception e) {
        //on error some code
    }

Пример: для французского: https://example.com/fr/home

try {
        URL url = new URL("https://example.com/fr/home");
       BufferedInputStream bis = new BufferedInputStream(url.openStream());
       byte[] buffer = new byte[1024];
       StringBuilder sb = new StringBuilder();
       int bytesRead = 0;
       while((bytesRead = bis.read(buffer)) > 0) {
           String text = new String(buffer, 0, bytesRead);
           sb.append(text);
       }
       bis.close();

     return sb.toString();
    } catch (Exception e) {
        //on error some code
    }

для перевода ваших данных REST вы можете использовать мой инструмент EasyTranslation, как его использовать

use EasyTranslation\EasyTranslation\EasyTranslation;
include('src/EasyTranslation.php');
class Example extends EasyTranslation{

public function __construct() {
    $this->setLanguage();   // Set a language or by default will check for client language (e.g. French is "fr")
    echo $this->translate('Welcome');
}
}

new Example();
person Abl1ck    schedule 15.06.2020
comment
У меня уже есть рабочий перевод. Однако я хотел знать, что лучше всего использовать languageCode или languageTag. - person MarkT; 16.06.2020