标签: i18next

使用i18next的异步语言选择器

我使用http://jamuhl.github.com/i18next本地化静态网站.

我的初始化脚本是:

jQuery(function($) {
    var setLng = $.url().param('setLng');
    if (setLng)
    {
      language_complete = setLng.split("-");
    }
    else
    {
      language_complete = navigator.language.split("-");
    }
    language = (language_complete[0]);
    console.log("I speak (root): %s", language);

    i18n.init({ lng: language, debug: true }, function() {
        // save to use translation function as resources are fetched
        $(".tzm-i18n").i18n();
        $(".page-i18n").i18n();
        $(".menu-i18n").i18n();
        $(".user-i18n").i18n();
        $(".search-i18n").i18n();
        $(".footer-i18n").i18n();
    });
    // language selector
    var lngSld = false;
    $('.lng_trigger').click(function() {
Run Code Online (Sandbox Code Playgroud)

这是HTML:

  <div id="page" class="page-i18n">
    <!--${languages} Bread crumbs -->
      <p data-i18n="welcome.p1"></p>
      <p data-i18n="welcome.p2"></p>
  </div>
  <li id="set-lang"><!-- …
Run Code Online (Sandbox Code Playgroud)

javascript jquery i18next

5
推荐指数
2
解决办法
3966
查看次数

使用requireJS和预编译的Handlebars模板加载翻译(i18next)

我有一个requireJS设置,包含预编译的Handlebars模板和我在数据库中的翻译i18next.我需要按以下顺序做一些事情:

  1. 从数据库加载我的翻译
  2. 在Handlebars中注册一个帮助器,以便我的预编译模板中的值可以被翻译

我的requireJS配置文件如下所示:

require.config({
  deps: ["main"],   
  paths: {
    'handlebars.runtime': "../assets/js/libs/handlebars.runtime.amd.min",
    i18n: "../assets/js/libs/i18next-1.7.1",

    // Shim Plugin
    use: "../assets/js/plugins/use"
  },

  use: {
    i18n: {
      attach: "i18n"
    }
  } 
});
Run Code Online (Sandbox Code Playgroud)

我的main.js文件看起来像这样,需要namespace.js:

require([
  'namespace',
  'modules/Transport'
], function (
  namespace,
  $,
  Transport
) {
  var Router = Backbone.Router.extend({
    routes: {
      '*any':                'any'
    },
Run Code Online (Sandbox Code Playgroud)

namespace.js将尝试注册Handlebars助手并使用翻译初始化i18next:

define([
  "handlebars.runtime",
  "use!i18n"
], function(
  Handlebars,
  i18n
) {   
  var defaultLanguage = 'en';
  var translations;
  $.when(
      $.getJSON('/api/translations', function …
Run Code Online (Sandbox Code Playgroud)

amd requirejs handlebars.js precompiled-templates i18next

5
推荐指数
1
解决办法
2019
查看次数

流星定位/ i18n libs比较

我正在尝试评估哪一个使用,所以会感谢做出这个决定的其他人的任何反馈.似乎有两个大的翻译项目:

的MessageFormat

http://messageformat.meteor.com/

PROS

  • 基于MessageFormat.js的实体库
  • 包括提取工具
  • 如果在应用程序中更新字符串,则处理模糊字符串和版本
  • javascript和把手方法
  • 用于字符串翻译的预建翻译工具/ webUI http://messageformat.meteor.com/translate/af
  • 由流星大师活跃的社区人Gadi撰写

TAP i18n

https://github.com/TAPevents/

笔记:

  • 基于i18next引擎
  • 使用AJAX加载语言

PROS

利弊? - 只有JSON格式,没有yaml,编辑非常繁琐 - 没有用于管理字符串的webUI

还有一些其他项目,如https://github.com/Nemo64/meteor-translator, 但上面两个似乎是最彻底的.我错过了其他人吗?

选择合适的工具时人们会使用哪些其他标准?messageFormat与i18next的基础技术似乎是一个因素.

问题:

1)页面中有多种语言

我正在尝试做一个双语应用程序但是:

点击:"只通过网络发送当前客户端语言所需的翻译"

这是否意味着语言只能是A或B,而不是混合,基于会话自动切换?

即如何在页面中提供助手以进行多次翻译

  EN: {{tr "string", 'en'}}
  FR: {{tr "string", 'fr'}}
Run Code Online (Sandbox Code Playgroud)

2)提取动态数据

至少messageFormat项目将捕获/提取静态页面中的字符串,但如果我已经在复杂的mongo集合中有很多内容,有没有办法捕获它?

感谢包装创作者或该领域其他人的任何见解.

javascript internationalization messageformat meteor i18next

5
推荐指数
1
解决办法
4160
查看次数

在aurelia i18N中使用多个翻译文件

我有一个使用aurelia-i18n的工作应用程序.我想将translation.json文件拆分成多个文件,如nav.json,message.json等,但我不知道该怎么做.
这就是它现在的样子.

locale
  |-en
     |- translation.json
Run Code Online (Sandbox Code Playgroud)

但我想以这种方式改变它.

locale
  |-en
     |- nav.json
     |- message.json
Run Code Online (Sandbox Code Playgroud)

有可能吗?如果是这样,我如何配置它并访问每个文件中的值?

i18next aurelia

5
推荐指数
1
解决办法
1382
查看次数

react-i18next没有在使用create-react-app创建的React应用程序中加载json翻译文件

我用create-react-app创建了一个React应用程序

我想实现翻译,我发现了react-i18next

安装完所需的软件包后,我设置了我的i18n.js配置文件:

import i18n from 'i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import XHR from 'i18next-xhr-backend';

i18n
    .use(XHR)
    .use(LanguageDetector)
    .init({
      debug: true,
      lng: 'en',
      nsSeparator: false,
      keySeparator: false,
      fallbackLng: false,
      backend: {
        loadPath: 'locales/{{lng}}/{{ns}}.json'
      }
    });


export default i18n;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误: i18next::backendConnector: loading namespace translation for language en failed failed parsing locales/en/translation.json to json

这是因为webpack找不到json文件并返回index.html文件内容:

在此输入图像描述

i18next reactjs webpack react-i18next

5
推荐指数
2
解决办法
3444
查看次数

i18next 从 json 文件加载翻译

我在路径中有英文 json 翻译文件:translation/en.json

我像这样初始化 i18next:

i18next.init({
    lng: navigator.language,
    fallbackLng : "en",
    backend: {
        loadPath: '/translation/{{lng}}.json',
    }
});
Run Code Online (Sandbox Code Playgroud)

跑完后

i18next.t(KEY);
Run Code Online (Sandbox Code Playgroud)

将在翻译文件中打印“KEY”而不是它的值

当翻译在 i18next 对象中的“资源”参数内时,它运行良好。像下面这样:

i18next.init({
    lng: navigator.language,
    fallbackLng : "en",
    resources: {
        en: {
            translation: {
                "KEY": "keyValue"
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我使用 i18next 框架

javascript jquery translation i18next

5
推荐指数
1
解决办法
2708
查看次数

从多个后端加载翻译

我有使用 react-i18next 的 React 应用程序,翻译存储在两个位置。一组在应用程序本地存储在一个文件夹中,其余的翻译来自远程 API。

我正在努力将两套都加载到应用程序中。使用 i18next-chained-backend 插件,它似乎只在第一个后端不加载翻译时提供回退,我似乎无法将其配置为加载两组翻译。

在基于 React 的应用程序中包含来自多个来源的翻译的最佳方法是什么?

i18next reactjs

5
推荐指数
1
解决办法
1415
查看次数

Picker onValueChange() 调用了两次

我想使用 react-18next 支持本地化。此组件显示Picker,设置 LocalStorage 键(所选语言)并更改应用程序语言。我注意到该onValueChange方法被调用了两次。第一个调用(在 Picker 项目上使用正确的选择点击操作)具有正确的参数(我选择的语言),第二个调用具有第一个 Picker 项目的值,只要值为 (!)。

示例:如果我选择EnglishPicker 项目,我会看到 Picker 切换到英语(第一次_changeLanguage()调用),然后再次切换到“设备”(第二次_changeLanguage()调用)。我确定这是一个异步操作问题,不知道在哪里..

@translate(['settings', 'common'], { wait: true })
export default class Settings extends Component {
    state = {};
     constructor(props)  {
        super(props);
    }
    componentWillMount() {
        this.getLang();
    }

    async _changeLanguage(ln) {
        const { t, i18n, navigation } = this.props;
        console.warn("_changeLanguage: ",ln)
        await this.promisedSetState({lang:ln})
        if(ln=="device") {
                console.warn("removing lang setting")
                await AsyncStorage.removeItem('@App:lang');
        } else {
                console.warn("lang setting: ", ln)
                await AsyncStorage.setItem('@App:lang', …
Run Code Online (Sandbox Code Playgroud)

i18next react-native expo react-i18next

5
推荐指数
2
解决办法
2563
查看次数

Angular 国际化 ( ngx-translate/ i18n OR i18next )

我需要在 Angular 的一个大型项目中实现国际化。根据我的发现,有两个主要选择:Angular 的官方i18nngx-translate

为了了解两者的优缺点,我进行了很多讨论:

https://github.com/angular/angular/issues/16477

https://github.com/ngx-translate/core/issues/495

https://github.com/ngx-translate/core/issues/783

ngx-translate 与 i18n 的差异

现在,第三个选项是“ angular-i18next ”。这方面的文档并不多。我知道它是 i18next 的包装器。但它是否克服了任何缺点,例如:

  • 翻译非模板文本。

  • 无需重新加载页面的动态翻译。

  • 使用 AOT 编译进行单一构建。

或者,我最好的选择是在i18nngx-translate之间进行选择?另外,有人在使用“ angular-i18next ”吗?

internationalization i18next angular-i18n ngx-translate angular

5
推荐指数
1
解决办法
1936
查看次数

i18next 警告或检查缺少语言的键(不是 fallbackLng)

到目前为止,我的项目正在使用i18next和 react-i18next 并取得成功。不涉及本地化或服务器端。

当前设置:
- 默认和后备语言:en
- 附加语言:fr

我想自动化一些与错误检查相关的事情:
1. 检查所有键是否在每个定义的语言文件中被翻译
2. 在 dev env 或 lint 中为 ci/cd 发出警告。

我试过做 1. 使用以下选项:


    saveMissing: true,
    saveMissingTo:"all",
    missingKeyHandler: (ng, ns, key, fallbackValue) => {
        console.log(ng, ns, key, fallbackValue)
    },

    // other options
    resources: {
        en: {
            translations: enTranslation,
        },
        fr: {
            translations: frTranslation,
        },
    },
    fallbackLng: 'en',
    ns: ['translations'],
    defaultNS: 'translations',

    interpolation: {
        formatSeparator: ',',
    },

    react: {
        wait: true,
    }

Run Code Online (Sandbox Code Playgroud)

我想如果我从我的法语 .json 中删除了一个密钥(以测试它是否有效),它会被记录下来,但它没有,只有当我删除这两个密钥时。

尝试过其他解决方案:
1. "eslint-plugin-i18n-json"但它没有检查我需要什么,没有找到正确的选项/配置 …

i18next reactjs

5
推荐指数
1
解决办法
1845
查看次数