尝试使用 NetworkError 设置语言时,ng2-translate 在 iOS 设备上失败(DOM 异常 19):发生网络错误
ng2-translate fails on iOS device when trying to set language with NetworkError (DOM Exception 19): A network error occurred
我一直在试图弄清楚为什么 Globalization.getPreferredLanguage() 只有在 iOS 设备上 运行 时才会失败(而不是在模拟器上 运行 或 Android 设备/模拟器)
Globalization.getPreferredLanguage().then((property) => {
let lang = property.value;
if (lang) {
if (lang.startsWith('en')){
this.translate.use('en_GB');
}
else if (lang.startsWith('fr')) {
this.translate.use('fr_FR');
}
else {
this.translate.use('en_GB');
}
} else {
console.log("property.value is null");
}
}).catch((reason) => {
this.translate.use('en_GB');// <-- not only does this NOT WORK, but the reason given is NetworkError (DOM Exception 19): A network error occurred.
});
我尝试过的:
- 使用 ionic 和 cordova 指令删除和添加全球化插件:
ionic plugin rm cordova-plugin-globalization && ionic plugin add
cordova-plugin-globalization
sudo cordova plugin rm cordova-plugin-globalization && sudo cordova plugin add cordova-plugin-globalization
编辑 1
因此,经过更多调试后,我可以看到失败的是 angular ng2-translate 'use' 函数。在我的 app.module.ts:
import { TranslateLoader, TranslateModule, TranslateStaticLoader } from 'ng2-translate/ng2-translate';
...
export function createTranslateLoader(http: Http) {
return new TranslateStaticLoader(http, '/assets/i18n', '.json');
}
...
@NgModule({
declarations: [
...
],
imports: [
...
BrowserModule,
HttpModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [Http]
}),
...
]
...
})
export class AppModule { }
但是在我app.component.ts的时候我打电话给
this.translate.use('en_GB');
它抛出一些异常。我已经检查过,文件确实存在于文件夹中:
/.../platforms/ios/www/assets/i18n
对我来说,Globalization.getPreferredLanguage() 从未得到解决。所以我目前正在使用
this.deviceLang = navigator.language;
此 returns 设备语言及其变体,如 (FR-FR / EN-US)
我一直在试图弄清楚为什么 Globalization.getPreferredLanguage() 只有在 iOS 设备上 运行 时才会失败(而不是在模拟器上 运行 或 Android 设备/模拟器)
Globalization.getPreferredLanguage().then((property) => {
let lang = property.value;
if (lang) {
if (lang.startsWith('en')){
this.translate.use('en_GB');
}
else if (lang.startsWith('fr')) {
this.translate.use('fr_FR');
}
else {
this.translate.use('en_GB');
}
} else {
console.log("property.value is null");
}
}).catch((reason) => {
this.translate.use('en_GB');// <-- not only does this NOT WORK, but the reason given is NetworkError (DOM Exception 19): A network error occurred.
});
我尝试过的:
- 使用 ionic 和 cordova 指令删除和添加全球化插件:
ionic plugin rm cordova-plugin-globalization && ionic plugin add cordova-plugin-globalization
sudo cordova plugin rm cordova-plugin-globalization && sudo cordova plugin add cordova-plugin-globalization
编辑 1 因此,经过更多调试后,我可以看到失败的是 angular ng2-translate 'use' 函数。在我的 app.module.ts:
import { TranslateLoader, TranslateModule, TranslateStaticLoader } from 'ng2-translate/ng2-translate';
...
export function createTranslateLoader(http: Http) {
return new TranslateStaticLoader(http, '/assets/i18n', '.json');
}
...
@NgModule({
declarations: [
...
],
imports: [
...
BrowserModule,
HttpModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [Http]
}),
...
]
...
})
export class AppModule { }
但是在我app.component.ts的时候我打电话给
this.translate.use('en_GB');
它抛出一些异常。我已经检查过,文件确实存在于文件夹中:
/.../platforms/ios/www/assets/i18n
对我来说,Globalization.getPreferredLanguage() 从未得到解决。所以我目前正在使用
this.deviceLang = navigator.language;
此 returns 设备语言及其变体,如 (FR-FR / EN-US)