-
Notifications
You must be signed in to change notification settings - Fork 3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added Localize HOC #2208
Added Localize HOC #2208
Conversation
// Load en Locale data | ||
import '@formatjs/intl-numberformat/locale-data/en'; | ||
|
||
function numberFormat(locale, number, options) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, is there a way to not have to define this twice? And if there is, do we think is worth it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We just need to import those files for mobile(native) platforms. I think it can be done via webpack. But for locale #2208 (review)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand but the numberFormat
is defined duplicate in 2 places.
(also, that link is supposed to send me where exactly? It takes me here again)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. So I am saying that we can load the imports via webpack
and remove two files.
And for locale probably
A proper way would be when the user switches a locale, load the file remotely.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah. So I am saying that we can load the imports via webpack and remove two files.
I am not sure I know how this works, can you explain?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can import the src/libs/numberFormat/index.js
which already defines the function and use it here, no?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
index.js
will be replaced with index.native.js
so we need a new file. then we import from that file. Or better would be to create a file called lib/polyfills/index.native.js
and import the packages there. this will allow adding all the polyfills at a single location and we import this file in app.js.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
index.js will be replaced with index.native.js
Huh? Why?
What I am saying is:
- The method is in index.js
- index.native.js would import it and use it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok. let me test it first to be sure. My assumption is that we replace index.js files with index.native.js on mobile platforms.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@iwiznia. I tested it. My assumptions are correct. index files are replaced with platform-specific index files(such as index.android.js on android). So I can make a common base.js file. or let's just leave it like this as this is just two lines of code. We had to create two files.
- Index.js
- index.android.js
To keep it dry, we can create one more base.js, But I think that will be totally overuse of DRY for just two lines. Anyways each platform only gets one file in the bundle.
So you did not really test this? Right now there's no UI to change the locale, can you do some tests by changing it via code or something like that? |
@iwiznia I tested it by loading one other locale file. tried these examples from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat. So for simple testing.
|
Updated. Please review. |
function numberFormat(locale, number, options) { | ||
return new Intl.NumberFormat(locale, options).format(number); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you test if importing and using the function defined in index.js
works properly please?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, I missed this comment
To clarify, did you manage to test on iOS? Seems like you did not? |
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
Please review.
Details
preferredLocale
to a list of functions and passes curried methods down to WrappedComponent.numberFormat
which uses default BrowserIntl
to convert the number.Intl.numberFormat
for mobile platforms.Fixed Issues
Fixes #2176Tests / QA Steps
Wrap any component with newly created HOC and use the method as
props.translations.method(params)
. Switch the preferred locale for the user(I am not sure How to change the Locale in App) and see this method call should give you output based on the new Locale.Tested On
I just tested it using console output and manually updating the locale on Onyx.