首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Intl同时使用多个语言环境

React-Intl同时使用多个语言环境
EN

Stack Overflow用户
提问于 2020-12-10 20:48:20
回答 1查看 292关注 0票数 1

我的用例是,我有一个react应用程序,它需要本地化为特定的ui语言-比方说德语。对于数字和日期时间格式,我们有另一种语言设置,这可能与ui语言不同。因此,让我们假设这种文化是en-US。

我设置了IntlProvider。

代码语言:javascript
复制
<IntlProvider messages={messages[language]} locale={language} defaultLocale="en">
        <NumberFormatCultureContextProvider value={timeFormatLanguage}>{children}</NumberFormatCultureContextProvider>
</IntlProvider>

并为第二种语言创建了一个自定义的React.Context ...

代码语言:javascript
复制
import React from "react";
import { assertNotUndefined } from "./Assertions";

const NumberFormatCultureContext = React.createContext<string>("en");

export function useDateTimeCulture(): string {
    return assertNotUndefined(React.useContext(NumberFormatCultureContext), "Missing 'NumberFormatCultureContext'");
}

export const NumberFormatCultureContextProvider = NumberFormatCultureContext.Provider;

在子组件中,我想这样做:

代码语言:javascript
复制
    const intl = useIntl();

    const dateTimeCulture = useDateTimeCulture();

    const getDateTimeFormatted = (date:Date) {
        return intl.formatDate(date, locale: dateTimeCulture);
    }

但是在intl.formatDate Api中没有区域设置的选项吗?

我如何实现这一点-在React Intl中同时使用两个地区?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-12 00:36:15

如果有人跟进的话...我的解决方案如下……

代码语言:javascript
复制
    const uiLanguage: string = user.profile.ui_culture ?? "en";

    const numberFormatLanguage: string = user.profile.culture ?? "en";

    const getMessageLanguage = () => {
        if (uiLanguage === "de") return "de";
        return "en";
    };

    return (
        <IntlProvider messages={messages[getMessageLanguage()]} locale={numberFormatLanguage}>
            {children}
        </IntlProvider>
    );

有了这些,您就有了本地化的消息,并且对于所有其他intl调用(例如,格式化的日期),将采用其他语言环境。

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

https://stackoverflow.com/questions/65234838

复制
相关文章

相似问题

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