如何使用 defineMessages 方法定义本地化?

Posted

技术标签:

【中文标题】如何使用 defineMessages 方法定义本地化?【英文标题】:How to define localization with defineMessages method? 【发布时间】:2016-09-10 01:42:25 【问题描述】:

我想本地化我的组件。我使用 yahoo/react-intl 库。我定义了一些消息

const messages = defineMessages(
    greeting: 
        id: 'app.home.greeting',
        description: 'Message to greet the user.',
        defaultMessage: 'Hello!'
    ,
  );

我不知道如何为消息定义可本地化的文本,所以我收到了这个错误

app.js:27785[React Intl] Missing message: "app.home.greeting" for locale: "nl", using default message as fallback.

使用示例

<input type="text" ...firstName placeholder=intl.formatMessage(messages.greeting) />

有人知道如何定义本地化消息吗? 使用 defineMessages 似乎无法做到这一点。 提前致谢。

【问题讨论】:

【参考方案1】:

defineMessages 旨在与babel-plugin of react-intl 一起使用。

事实上,它只是在提取代码中某处定义的消息时帮助您。这在大型代码库中很有用,可以使消息 ID 和翻译保持同步。

但是,无论您是否使用defineMessages,您仍然需要提供这样的翻译:

const translations = 
    'en-US': 
        'app.home.greeting': 'Hello!',
        'app.home.color.description': 'Please choose a color',
    ,
    'en-GB': 
        'app.home.greeting': 'Hello!',
        'app.home.color.description': 'Please choose a colour',
    ,
    de: 
        'app.home.greeting': 'Hallo!',
        'app.home.color.description': 'Bitte eine Farbe auswählen',
    
 

<IntlProvider locale="en" messages=translations.en>
    <FormattedMessage
        id='app.home.color.description'
        description='A task description to choose a color'
        defaultMessage='Please choose a color'
    /> 
    <input type="text" ...firstName placeholder=intl.formatMessage(messages.greeting) />
</IntlProvider>

当然,您不需要将所有内容都包含在 IntlProvider 中。只需在您的***/应用组件周围添加一个IntlProvider

【讨论】:

是的,但实际上我应该为 uk en 翻译定义两条具有不同 id 的消息。我说的对吗? 不,每个字符串都使用一个 id。我已经编辑了我的答案以澄清这一点。 translations.en 中的en 来自哪里?以及如何在全局范围内传递 translations 对象,以便在各种组件上重用它? @Sag1v 我想应该是translations['en-US']

以上是关于如何使用 defineMessages 方法定义本地化?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 react-intl 使用标签(链接)格式化消息?

[需求管理-5]:需求分析 - 如何进行有潜在商业价值需求的帅选?用户故事的定义方法?

Linux 系统中 如何配置自定义命令 (Mac本同样适用)

如何从 Castle.DynamicProxy 中的 ProxyGenerationHook 访问自定义方法属性

如何理解Keras中的指标Metrics

如何在shader中使用自定义函数