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
私を助けることができる専門家はいますか?