我目前有翻译成英文和日文的.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必须提供id来格式化消息。
重复我的问题:
提前谢谢。
发布于 2019-03-05 15:57:24
对问题1的回答:
我会答应的。您必须在使用声明性api (例如:<FormattedMessage />)还是使用命令式api(例如:intl.formatMessage())之间做出选择。
对问题2的回答:
你可以,但那你为什么要用react-intl呢?(您可以说,您只想对日期、数字、百分比使用它的本地化方法。这是可以的,但是IMHO除了使用lib之外,您还需要更多的精力来构建自己的解决方案。)
我总是喜欢使用声明性API,拥有ID和默认消息是一种很好的做法。这个默认的消息-intl抱怨实际上是为了帮助你。这是一个后遗症,如果你错过了一个翻译,它默认为这条消息。
如果您想重用标签或者需要在外部使用react组件,我建议您使用命令式api (根据我的经验,这是唯一可以这样做的情况)。您也可以使用巴贝尔-插件-反应-intl自动从您的应用程序中提取标签,并使您的生活非常轻松!
https://stackoverflow.com/questions/54996986
复制相似问题