javascript - react-intl - accessing nested messages -


i'm trying use react-intl package inside app. app rendered on server wrote code determine language use , serve intlprovider.

translations provided in messages.js file , this:

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

what this:

// import messages './messages.js' // check locale user (based on cookies or other things) const locale = ... // required messages const messagesforlocale= = messages[locale]; // supply messages intlprovider <intlprovider locale={locale} messages={messagesforlocale}>   // ... </intlprovider> 

then when use formattedmessage component can't access nested message (anothermessage) code this:

<formattedmessage id="nested.anothermessage" ... /> 

but message accessible.

any ideas made mistake, or maybe i'm missing in whole concept?

since react intl v2 no longer supports nested messages objects, messages need flatten.

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)}> 

refs:


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -