所以我按照教程创建了一个多语言的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部分不匹配,所以即使认为手机设置为使用德语,因为是在美国,也不会翻译成德语。
你们都喜欢什么?我现在想用LanguageCode来检查语言。如果languageCode是'de'就用德文翻译。
有什么理由不使用LanguageCode而使用LanguageTag吗?
首先,你必须有参数的REST服务器的数据。
例如:对于英语: https:/example.comenhome
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.comfrhome。
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();