8

django i18n サポートを使用して JavaScript ファイルを翻訳したいと考えています。次のJavaScriptファイルがあります。

var test_text = gettext('example');

@withStyles(styles)
export default class HomePage {
  static contextTypes = {
    i18n: PropTypes.object
  }

  constructor() {
    this.componentDidMount.bind(this);
    this.handleCitySearch.bind(this);
  }

  render() {
    return (
      <Grid className="HomePage">
        <Row className="HomePage-hero">
          <Col md={8} style={{ textAlign: 'center' }}>
            <Input ref="city" bsSize="large" type="text" />
            <Button bsSize="large" bsStyle="default" onClick={this.handleCitySearch}>{gettext('button text')}</Button>
          </Col>
          <Col md={4}>
            <ul>
              <li>{gettext('SOME TEXT')}</li>
              <li>{gettext('MORE TEXT')}</li>
            </ul>
          </Col>
        </Row>
      </Grid>
      );
  }
}

ここで、djangos makemessages コマンドを実行します。

python manage.py makemessages -l de -d djangojs -v 3 -s

作成された翻訳ファイルには 4 つのエントリ ('example'、'button text'、'SOME TEXT'、'MORE TEXT') があると予想されgettextます。これは、js ファイルに 3 回出現するためです。しかし、作成されたロケール ファイルには、"example" のエントリが 2 つしかありません。

#: ../HomePage.js:1
msgid "example"
msgstr ""

#: ../HomePage.js:25
msgid "MORE TEXT"
msgstr ""

この警告も表示されます。しかし、それが何を意味するのかわかりません (ファイルには 32 行しかありません)。

HomePage.js:33: warning: RegExp literal terminated too early

django が他のエントリを無視する理由を知っている人はいますか? jsx構文を使用しているためか、es6クラスを使用しているためでしょうか?

アップデート:

これはdjangoの問題ではなく、xgettext. Django はxgettext次のコマンドで呼び出します。

xgettext  --language=JavaScript --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 --output=- --from-code=UTF-8 --add-comments=Translators  ../HomePage.js

それで、xgettext私を助けることができる専門家はいますか?

4

3 に答える 3

1

Djangoの最新バージョン(1.10.3)でこれを試しました。それはうまくいくように見えました。Django のバージョンをアップグレードできますか?

私のために働いたコードはここにあります: https://github.com/guitarmanvt/stackoverflow-question-32403632

また、JavaScript 関数gettextをどこかに定義する必要があることにも注意してください。私が最後に見たとき、そこにはいくつかの JavaScript i18n ライブラリーがありましたが、xgettextDjangoでうまく機能するものは多くありませんでした。自分で巻く必要があるかもしれません。

あるいは、Sentry が JSX で i18n を行う方法を見てみましょう。https://blog.sentry.io/2016/01/07/react-i18n.html

ハッピー翻訳!

于 2016-11-23T13:01:44.390 に答える