我目前具有以下格式的英语和日语.json文件翻译版本:
{
"en": [{
"id": "Cancel",
"defaultMessage": "Cancel"
}, {
"id": "CommonTags",
"defaultMessage": "Common Tags"
}]
"ja": [{
"id": "Cancel",
"defaultMessage": "キャンセル"
}, {
"id": "CommonTags",
"defaultMessage": "共通タグ"
}]}
我的问题是,考虑到我已经生成并翻译了所有这些消息,为什么现在需要定义消息?我只是想通过以下方式访问它们,但会收到错误消息:
var messages_ja = require("../../../Resources/Resources.ja2.js.json");
class LocalizedApp extends React.Component {
props: any;
static propTypes: { intl: (object: any, key: string, componentName: string, ...rest: any[]) => Error | null; };
render() {
return (...
<h1>{this.props.intl.formatMessage({ id: messages_ja.Cancel })}</h1>);}}
我收到以下错误:
[React Intl]必须提供id
来格式化消息。
重复我的问题:
谢谢。
答案 0 :(得分:0)
问题1的答案:
我会说是的。您必须在使用声明式(例如:library
)或命令式api(例如:<FormattedMessage />
)之间进行选择。
问题2的答案:
可以,但是那为什么要使用intl.formatMessage()
?
(您可以说,您只想使用其本地化方法来显示日期,数字,百分比..没关系,但是恕我直言,除了使用lib之外,您还需要更多的精力来构建自己的解决方案。)
我总是喜欢使用声明性API,这是一个好习惯,要有一个 ID 和一个默认消息。 react-intl抱怨的这个默认消息实际上是为了帮助您。如果您错过了一次翻译,这是一个后备方法,它默认为此消息。
如果您想重用标签或需要在react组件之外使用它们,我建议使用命令式api(根据我的经验,这是唯一可以完成的情况)。您还可以使用babel-plugin-react-intl从应用程序中自动提取标签,使生活变得非常轻松!