改变电子应用中的语言(i18n-react)

时间:2017-04-20 00:52:58

标签: javascript reactjs templates internationalization electron

我正在开发一个Electron React / Redux应用程序,它需要能够即时更改语言。目前我们将一些字符串存储为常量(对于不是React组件的组件,例如对话框内容),我们还有一个从模板生成的菜单(见下文)。 我们目前正在使用i18n-react库,它似乎易于使用并支持一些高级功能,如复数等。这是一个加载我们菜单的英语翻译的例子:

import T from 'i18n-react';
T.setTexts({
  menu: {
    file: {
      label: '&File',
      new: '&New...',
      open: '&Open...',
      // etc.
    }
  }
});

这将是菜单的模板:

const template = [{
  label: T.translate('menu.file.label'), //'&File'
  submenu: [{
    label: T.translate('menu.file.new'), //'&New...'
    accelerator: 'Ctrl+N',
    click: () => { /*some code*/ },
  }],
  // etc.
}]
const menu = Electron.remote.Menu.buildFromTemplate(template)
Electron.remote.Menu.setApplicationMenu(menu)

问题是翻译后的字符串就是那个普通的常量字符串。因此,当我们动态更改语言(使用T.setTexts)时,字符串不会改变。反应组件(可能)很好,因为它们存储一个对象,而不仅仅是一个字符串(来自docs的例子):

React.render(
  <T.span text={{ key: "greeting", myName: "i18n-react" }}/>,
  document.getElementById('content')
);

但是如何说服电子菜单,对话框等改变?

0 个答案:

没有答案
相关问题