stefalda / ReactNativeLocalization

Class to localize the ReactNative interface
MIT License
900 stars 123 forks source link

formatString returns "TypeError: Cannot read property '0' of undefined" #186

Open zhenghow93 opened 4 years ago

zhenghow93 commented 4 years ago

I have upgraded from version 0.1.32 to version 2.1.6, and formatString is broken. react-native version 0.61.5

For example:

strings: {
   info: 'Bread will be done in {0} minutes.'
}
const minute = 30;

Previously I could use it like strings.formatString(strings.info, minute) and it will display Bread will be done in 30 minutes.. Now it gives error TypeError: Cannot read property '0' of undefined.

After some experiments, I realised that strings.formatString(strings.info, [30]) would work. The README did not mention that we have to enclose the string params with [] square brackets.

Anything that I have missed? Thanks in advance.

zhenghow93 commented 4 years ago

Ah, okay. I realised that the minute was undefined at first, and then only updated with a value afterwards. Previous version will fill it with undefined for a while then update the value after it's updated. Any ways to accommodate undefined value?

jerearaujo03 commented 3 years ago

I made a function to protect agains this error

export const formatString = (key, ...values) => {
  const variables = values?.map(val => val || '');
  return strings.formatString(key, ...variables);
};