标签: react-intl

如何处理React-Intl消息的多次使用?

关于这种用法,react-intl我在文档中找不到任何内容(我正在使用v2分支),因此这个问题.以下用例是否有推荐的方法?

说我有两个组件,TooltipSelect.两者都需要相同的i18n格式字符串,例如:

<FormattedMessage
    id='ui.widget.cycleOffsetSelector.timeCycle.label'
    defaultMessage="This {cycle}"
    values={{cycle: props.cycle}}
/>
Run Code Online (Sandbox Code Playgroud)

如何在其他组件中使用相同的消息?只是用这个:

<FormattedMessage
    id='ui.widget.cycleOffsetSelector.timeCycle.label'
    values={{cycle: props.cycle}}
/>
Run Code Online (Sandbox Code Playgroud)

不起作用(不应该:)).那么,这样做的正确方法是什么?我是否必须在我的应用程序中全局保存这些共享消息?因为维护与代码分开的"共享"intl消息列表会变得很麻烦,所以react-intl声称要解决的问题.

reactjs react-intl

5
推荐指数
1
解决办法
3117
查看次数

babel-plugin-react-intl:将字符串提取到单个文件

当前,在使用时babel-plugin-react-intl,将使用'id','description'和'defaultMessage'为每个组件创建单独的json。我需要的是仅创建一个json,其中包含一个对象,其中所有“ id”作为“键”,所有“ defaultMessage”作为“值”

现状:

ComponentA.json

[
  {
    "id": "addEmoticonA",
    "description": "Add emoticon",
    "defaultMessage": "Insert Emoticon"
  },
  {
    "id": "addPhotoA",
    "description": "Add photo",
    "defaultMessage": "Insert photo"
  }
]
Run Code Online (Sandbox Code Playgroud)

ComponentB.json

[
  {
    "id": "addEmoticonB",
    "description": "Add emoji",
    "defaultMessage": "Insert Emoji"
  },
  {
    "id": "addPhotoB",
    "description": "Add picture",
    "defaultMessage": "Insert picture"
  }
]
Run Code Online (Sandbox Code Playgroud)

我需要翻译什么。

final.json

{
  "addEmoticonA": "Insert Emoticon",
  "addPhotoA": "Insert photo",
  "addEmoticonB": "Insert Emoji",
  "addPhotoB": "Insert picture"
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以完成这项任务?可能是通过使用python脚本或其他任何方式。即从不同的json文件制作一个json文件。或者使用babel-plugin-react-intl直接制作一个json文件

react-intl

5
推荐指数
1
解决办法
3731
查看次数

使用Intl.NumberFormat时,Edge和IE不会显示USD/CAD货币符号

对不起,如果有人问我但找不到任何东西......

Chrome,Firefox等中的以下代码将返回"US $"的货币符号:

new Intl.NumberFormat('en-CA', {
    style: 'currency',
    currencyDisplay: 'symbol',
    currency: 'USD'
}).format(65421.45)
Run Code Online (Sandbox Code Playgroud)

如果货币设置为'CAD',它将只使用'$':

new Intl.NumberFormat('en-CA', {
    style: 'currency',
    currencyDisplay: 'symbol',
    currency: 'CAD'
}).format(65421.45)
Run Code Online (Sandbox Code Playgroud)

但是在我测试的IE和Edge的所有版本中,这两个示例都将返回货币符号'$'.无论使用何种地区或货币,它都不会返还US $或CA $.(同样适用于澳元,港币等)

示例:https://jsfiddle.net/5wfzk7mf/

当我使用react-intl的formatNumber()函数时也会发生这种情况,因为它正在使用Intl.NumberFormat.

我错过了什么或这是一个浏览器错误?

javascript internet-explorer currency microsoft-edge react-intl

5
推荐指数
0
解决办法
754
查看次数

是否可以覆盖一个特定 intl.formatMessage 的语言环境?

我用react-intlenfr,和我的应用程序做出反应被包裹在

<IntlProvider locale={lang}>
Run Code Online (Sandbox Code Playgroud)

这样,例如 when langis en,所有intl.formatMessage调用都会产生英文文本。

我想要实现的是我想要的<IntlProvider locale="en">,但是在应用程序内部,我需要将特定的一个intl.formatMessage翻译成fr.

reactjs react-intl

5
推荐指数
1
解决办法
1105
查看次数

如何使用React-Intl呈现格式化消息列表

我有一个navigation标准项目,例如:联系方式,服务,价格等...我将其呈现为:

const menuItemList = menuItems.map((item, index) => {
    return (
        <li key={index}>
            <NavLink to={item.url}>{item.title}</NavLink>
        </li>
    );
});
Run Code Online (Sandbox Code Playgroud)

工作正常。但是现在我需要翻译此导航,并react-intl为此使用库。因此,对于react-intl 文档,我必须这样使用FormattedMessage

<p>
   <FormattedMessage id="mainText"/>
</p> 
Run Code Online (Sandbox Code Playgroud)

有用。但是如何将其用于列表呈现?我认为这可以解决此问题,但事实并非如此。

const menuItemsList = menuItems.map((item, index) => {
    return (
        <li key={index}>
            <NavLink to={item.url}>
                <FormattedMessage id="mainText" values={item.title}/>
            </NavLink>
        </li>
    );
});
Run Code Online (Sandbox Code Playgroud)

伙计们,请帮忙。如何React使用FormattedMessagefrom中的项目渲染列表react-intl

javascript reactjs react-intl

5
推荐指数
1
解决办法
594
查看次数

如何使用 React-Intl 插入带有 injectIntl​​ formatMessage 的 HTML 标签?

我有一个 react-intl 包问题。我正在使用 injectIntl​​ 方式在组件中使用道具。纯字符串很好,但如果我包装了 HTML 标签,它将不起作用。

纯弦成功案例

const _tableNoText = intl.formatMessage(
    { id: 'footer.table_no' },
    { value: basket.table }
);
//console -> Table 1
Run Code Online (Sandbox Code Playgroud)

带有 HTML 标签失败案例的纯字符串

const _tableNoText = intl.formatMessage(
    { id: 'footer.table_no' },
    { value: <b>basket.table</b> }
);
// console -> Table [object object]
Run Code Online (Sandbox Code Playgroud)

如果我更改formatMessageformatHTMLMessage,它将输出与上述相同的结果,我该如何解决?

非常感谢大家。

javascript reactjs react-intl

5
推荐指数
1
解决办法
4484
查看次数

Webpack动态导入.json文件?

我正在将 React Intl 用于 x 种语言(如下所示),目前我在设置应用程序的位置导入以下内容:

import { addLocaleData } from 'react-intl';
import locale_en from 'react-intl/locale-data/en';
import locale_de from 'react-intl/locale-data/de';

import messages_en from './translations/en.json';
import messages_de from './translations/de.json';

addLocaleData([...locale_en, ...locale_de]);

...
export const messages = {
    en: messages_en,
    de: messages_de
}
Run Code Online (Sandbox Code Playgroud)

由于无论使用哪种语言,这些语言文件都会被导入,我的主捆绑 js 文件变得相当大,尤其是 .json 文件。

如何使用 Webpack 拆分这些语言文件(或使用 CopyWebpackPlugin 将它们复制到我的 dist 文件夹中),然后根据当前使用的语言动态导入它们?

该应用程序是同构的,因此相同的代码正在服务器上运行。

javascript node.js reactjs webpack react-intl

5
推荐指数
1
解决办法
3080
查看次数

使来自 react-intl 的 FormattedMessage 中的 id 继承自自定义 TypeScript 接口以启用 VS IntelliSense 和类型检查

鉴于react-localization它没有日期和数字格式,并且严重依赖于我们决定切换到的一位开发人员,react-intl因为从长远来看它似乎更安全。

https://github.com/stefalda/react-localization/graphs/contributors

我们之前的代码是这样的:

本地化服务.ts

import LocalizedStrings from 'react-localization';

import svSE from './languages/sv-SE';
import enUS from './languages/en-US';
import arSA from './languages/ar-SA';

export default new LocalizedStrings({
    svSE,
    enUS,
    arSA
});
Run Code Online (Sandbox Code Playgroud)

ILanguageStrings.ts

export interface ILanguageStrings {
    appName: string
    narration: string
    language: string
}
Run Code Online (Sandbox Code Playgroud)

en-US.ts

import { ILanguageStrings } from '../ILanguageStrings';

const language: ILanguageStrings = {
    appName: "Our App",
    narration: "Narration",
    language: "Language"
}

export default language;
Run Code Online (Sandbox Code Playgroud)

然后可以导入本地化并ILanguageStrings通过 Visual Studio 中的 IntelliSense 可见并通过 TypeScript 进行验证。

import localization from …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs react-intl react-localization

5
推荐指数
1
解决办法
1040
查看次数

如何在react-intl中格式化句子中的特定单词

如何渲染嵌套元素react-intl

我正在尝试渲染什么:

<FormattedMessage>
    This is a <strong>House</strong>
</FormattedMessage>
Run Code Online (Sandbox Code Playgroud)

这已经在这里讨论过,文档中应该示例,但我找不到它们。

javascript reactjs react-intl

5
推荐指数
1
解决办法
7250
查看次数

Next.js 10 + 子路由,如何在服务器端的自定义应用程序中访问语言环境

我正在将一个项目从next.js 7迁移到 10。它使用react-intl进行翻译,并且是用 TypeScript 编写的。

在以前的版本我有一个自定义的server.js和处理子路由多语言的目的(/日,/ FR等),在它。在自定义应用程序组件中,通过 getInitialProps,我从req获取语言环境并将其作为道具传递给我的组件。所以整个画面是这样的: 自定义应用程序:

static async getInitialProps({ Component, ctx }) {
    let pageProps = {}

    const { req } = ctx;
    const { locale, messages } = req || (window as any).__NEXT_DATA__.props;
    const initialNow = Date.now();

    if (Component.getInitialProps) {
        pageProps = await Component.getInitialProps(ctx)
    }
    return { pageProps, locale, messages, initialNow }
}
Run Code Online (Sandbox Code Playgroud)

和组件

render() {
        const { Component, pageProps, locale, messages, initialNow …
Run Code Online (Sandbox Code Playgroud)

internationalization reactjs redux react-intl next.js

5
推荐指数
1
解决办法
3995
查看次数