Я хочу использовать поддержку 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
Я ожидал, что созданный файл перевода будет содержать четыре записи («пример», «текст кнопки», «НЕКОТОРЫЙ ТЕКСТ» и «БОЛЬШЕ ТЕКСТА»), потому что gettext
появляется трижды в файле js. Но в созданном файле локали есть только две записи для "примера":
#: ../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
эксперт, который может мне помочь?