gpt4 book ai didi

javascript - react-intl - 访问嵌套消息

转载 作者:数据小太阳 更新时间:2023-10-29 04:05:00 24 4
gpt4 key购买 nike

我正在尝试在应用程序中使用 react-intl 包。该应用程序在服务器上呈现,因此我编写了一些代码来确定使用哪种语言并将其提供给 IntlProvider

翻译在 messages.js 文件中提供,它们看起来像这样:

export default {
en: {
message: '...some message',
nested: {
anotherMessage: '...another message',
}
}
de: {
// ...
}
}

我的做法是这样的:

// import messages from './messages.js'
// Check the locale for the user (based on cookies or other things)
const locale = ...
// Get the required messages
const messagesForLocale= = messages[locale];
// Supply the messages to the IntlProvider
<IntlProvider locale={locale} messages={messagesForLocale}>
// ...
</IntlProvider>

然后,当我使用 FormattedMessage 组件时,我无法使用如下代码访问嵌套消息 (anotherMessage):

<FormattedMessage id="nested.anotherMessage" ... />

但是 message 是可以访问的。

有没有我犯错的想法,或者我可能在整个概念中遗漏了什么?

最佳答案

由于 React Intl v2 不再支持嵌套的消息对象,消息需要是 flattened .

export const flattenMessages = ((nestedMessages, prefix = '') => {
if (nestedMessages === null) {
return {}
}
return Object.keys(nestedMessages).reduce((messages, key) => {
const value = nestedMessages[key]
const prefixedKey = prefix ? `${prefix}.${key}` : key

if (typeof value === 'string') {
Object.assign(messages, { [prefixedKey]: value })
} else {
Object.assign(messages, flattenMessages(value, prefixedKey))
}

return messages
}, {})
})

// Use flattenMessages
<IntlProvider locale={locale} messages={flattenMessages(messagesForLocale)}>

引用:

关于javascript - react-intl - 访问嵌套消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45783677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com