i18next 不能在 Cordova iOS 6.1.0 上翻译

Posted

技术标签:

【中文标题】i18next 不能在 Cordova iOS 6.1.0 上翻译【英文标题】:i18next doesn't translate on Cordova iOS 6.1.0 【发布时间】:2020-07-15 16:31:42 【问题描述】:

我已经在 iosandroid 上使用 v1.10.x 多年,但新迁移到 wkwebview i18next(包括 1.11.2)只会返回密钥。我很好奇是否有人在 Cordova iOS 6.1.0、Cordova 9.0.0 中成功使用 i18next,以及是否有人能发现我的错误。

[编辑] 开启调试后,我得到了这个错误,虽然它有点无用

2020-07-15 11:08:29.649177-0700 myapp[15438:5134539] error when loading /src/locales/en/translation.json

[/编辑]

这是我的 i18next 初始化代码,min 包由 index.html 加载。我将资源对象添加到 init 选项中,以查看我的 translation.json 文件是否存在问题,但显式资源也没有翻译。此初始化在 Cordova Android 9.0 上运行良好。

      /* ******************* internationalization and go **************** */
  // initialize i18n, launch react in the callback so we're able to localize
  i18n.init(
    
      fallbackLng: "en",
      debug: true,
      resources: 
        en: 
          translation: 
            "clf_js_Username": "Who ARE you?"
          
        
      
    ,
    function(err, t) 
      if (typeof err !== "undefined") 
        console.log("LH.iLE - initialization returned error >" + err + "<");
      
      setTimeout(() => 
        console.log(
          "********** i.i18init is complete - starting react **********"
        );

        // setup the action groups for 'special' notifications
        // addKatzerActionGroups();

        //************** launch React+Redux **********

(blah blah blah——超时是一个神奇的数字 1000ms 允许 i18n 初始化) );

【问题讨论】:

【参考方案1】:

安装这个插件(cordova-ios 6+)

  cordova plugin add https://github.com/globules-io/cordova-plugin-ios-xhr

然后设置

  <preference name="AllowUntrustedCerts"  value="true" />
  <preference name="InterceptRemoteRequests" value="all" />
  <preference name="allowFileAccessFromFileURLs" value="true" />
  <preference name="allowUniversalAccessFromFileURLs" value="true" />

【讨论】:

我没有充分理由使用这个插件,只是它在 config.xml 中公开了选项。好像可以了,谢谢!【参考方案2】:

WKWebView 对文件加载施加了额外的 CORS 限制,结果 i18next 使用 XHR 加载翻译文件,因此加载被阻止。通过添加此插件进行修复,该插件已针对 cordova-ios 6.0 进行了更新

https://github.com/ej-dunne/cordova-plugin-wkwebview-file-xhr

【讨论】:

【参考方案3】:

这是为我做的:

<plugin name="@ahovakimyan/cordova-plugin-wkwebviewxhrfix" />
<platform name="ios">
 <feature name="CDVWebViewEngine">
        <param name="ios-package" value="CDVWebViewEngine" />
 </feature>
</platform>

【讨论】:

以上是关于i18next 不能在 Cordova iOS 6.1.0 上翻译的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中导入 i18next?

i18next 没有加载翻译文件

i18next 在没有翻译文件时得到 404 响应

如何使用钩子在反应 i18next 中修复“未指定回退 UI”

如何使用 i18next?翻译问题

i18next 显示键而不是值