首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >function intl:为什么需要使用<FormattedMessage>组件或defineMessagesAPI函数定义消息?

function intl:为什么需要使用<FormattedMessage>组件或defineMessagesAPI函数定义消息?
EN

Stack Overflow用户
提问于 2019-03-05 06:53:20
回答 1查看 3.9K关注 0票数 1

我目前有翻译成英文和日文的.json文件的格式:

代码语言:javascript
复制
{
"en": [{
    "id": "Cancel",
    "defaultMessage": "Cancel"
}, {
    "id": "CommonTags",
    "defaultMessage": "Common Tags"
}]
"ja": [{
    "id": "Cancel",
    "defaultMessage": "キャンセル"
}, {
    "id": "CommonTags",
    "defaultMessage": "共通タグ"
    }]}

我的问题是,考虑到我已经生成和翻译了所有这些信息,为什么我现在需要定义这些消息呢?我只是想以以下方式访问它们,但会出错:

代码语言:javascript
复制
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来格式化消息。

重复我的问题:

  1. 我真的需要整合生态系统来定义信息吗。如果是,为什么?
  2. 是否可以简单地根据地区从json访问字符串,而不为它们创建formattedMessages。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 15:57:24

对问题1的回答:

我会答应的。您必须在使用声明性api (例如:<FormattedMessage />)还是使用命令式api(例如:intl.formatMessage())之间做出选择。

对问题2的回答:

你可以,但那你为什么要用react-intl呢?(您可以说,您只想对日期、数字、百分比使用它的本地化方法。这是可以的,但是IMHO除了使用lib之外,您还需要更多的精力来构建自己的解决方案。)

我总是喜欢使用声明性API,拥有ID和默认消息是一种很好的做法。这个默认的消息-intl抱怨实际上是为了帮助你。这是一个后遗症,如果你错过了一个翻译,它默认为这条消息。

如果您想重用标签或者需要在外部使用react组件,我建议您使用命令式api (根据我的经验,这是唯一可以这样做的情况)。您也可以使用巴贝尔-插件-反应-intl自动从您的应用程序中提取标签,并使您的生活非常轻松!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54996986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档