Moment: рдореЗрдВ, рдЕрдореЗрд░рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдирд╡ре░ 2016  ┬╖  42рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: moment/moment

рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рд╢реНрди:

рдХреЛрдИ 'рдПрди', 'рдПрди-рдпреВрдПрд╕' рд╕реНрдерд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ?
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ 'рдбрд┐рдлрд╝реЙрд▓реНрдЯ' рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди, рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдореНрдмреЛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрдХреЗрд▓ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдЖрдк рдЙрд╕реА рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреНрд╖рдг.рд▓реЛрдХ () рдХрд╣ рд░рд╣реЗ рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ en / en-US рдорд╛рдорд▓реЗ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рдЕрдкрдиреЗ рдорд╣рд╛рди рдХрд╛рдо рдХреЗ рд▓рд┐рдП Thxред рдзрдХреЗрд▓рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@icambron рдореЗрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

E/ReactNativeJS: Requiring unknown module "./locale/en-us".
E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
                                                                Process: com.myApp, PID: 30054
                                                                com.facebook.react.common.JavascriptException: Requiring unknown module "./locale/en-US"., stack:
                                                                o<strong i="7">@2</strong>:742
                                                                n<strong i="8">@2</strong>:426
                                                                i<strong i="9">@2</strong>:278
                                                                t<strong i="10">@2</strong>:210
                                                                Xe<strong i="11">@648</strong>:16702
                                                                nt<strong i="12">@648</strong>:17804
                                                                gt<strong i="13">@648</strong>:22583
                                                                yt<strong i="14">@648</strong>:22460
                                                                wt<strong i="15">@648</strong>:23200
                                                                c<strong i="16">@648</strong>:1112
                                                                parse<strong i="17">@645</strong>:1536
                                                                render<strong i="18">@643</strong>:2923
                                                                _renderValidatedComponentWithoutOwnerOrContext<strong i="19">@141</strong>:7295
                                                                _renderValidatedComponent<strong i="20">@141</strong>:7462
                                                                performInitialMount<strong i="21">@141</strong>:3012
                                                                mountComponent<strong i="22">@141</strong>:2056
                                                                mountComponent<strong i="23">@132</strong>:205
                                                                performInitialMount<strong i="24">@141</strong>:3162
                                                                mountComponent<strong i="25">@141</strong>:2056
                                                                mountComponent<strong i="26">@132</strong>:205
                                                                performInitialMount<strong i="27">@141</strong>:3162
                                                                mountComponent<strong i="28">@141</strong>:2056
                                                                mountComponent<strong i="29">@132</strong>:205

рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдирд╛, рдХреНрдпреЛрдВрдХрд┐ getLocale рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдХреБрдВрдЬреА ('en-US') рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрднреА рднреА 'en' рд╕реЗ рдореЗрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд▓реЛрдбрд▓реЛрдХреЗрд▓ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ selectLocale рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЪрдпрди рд╕реВрдЪреА рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд╣рд▓реЗ 'рдПрди-рдпреВрдПрд╕' рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ 'рдПрди' рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдРрдк рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕рд░рдгреА рдереАред
рдпрд╣ рднреА рдЕрдЬреАрдм рддрдереНрдп рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдПрдХ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдлрд┐рд░ рднреА рджреБрд░реНрдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред

EDIT 2: рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдбрд┐рдмрдЧ (__DEV__) рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ 'рдПрди' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЧрд┐рд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ __PROD__ рдореЗрдВ рдЗрддрдиреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрдлреЛрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдХреНрд╖рдг рдореЗрдВ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИред

EDIT 3: рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЗрдПрд╕ рдбреЙрдХреНрд╕ рд╕реЗ, "рдпрджрд┐ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреА рд╣реИрдВред" рддреЛ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдмрдЪрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╕рднреА 42 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ en рд▓реЛрдХреЗрд▓ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕реЗ moment().locale() рдФрд░ moment.locale() рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

moment.locale('fr')
"fr"
moment().format("LLLL")
"vendredi 25 novembre 2016 03:39"
moment.locale('en')
"en"
moment().format("LLLL")
"Friday, November 25, 2016 3:39 AM"

en-US рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдХрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореИрдЪ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ en рд▓реЛрдХреЗрд▓ US:

moment.locale('en-GB')
"en-gb"
moment().format("LLLL")
"Friday, 25 November 2016 03:40"
moment.locale('en-US')
"en"
moment().format("LLLL")
"Friday, November 25, 2016 3:40 AM"

рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдЦрд░реАрджрддрд╛; рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд▓реЛрдХреЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд▓ / рд▓реЛрдХреЗрд▓ / $ {рдбрд┐рдЯреЗрд▓реЛрдХреЗрд▓} рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдк рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рдЪрд░ "рдПрди" рдпрд╛ "рдПрди-рдпреВ" рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреА (404 рдорд┐рд▓рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЗрд╕реЗ 'рдбреА' рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдЧреА ред

@ рдИрдЧреВрдб рдореЛрдореЗрдВрдЯ рдХреЗ рд▓реЛрдХрд▓ рд▓реЛрдбрд░ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрдЧреНрд░реЗрдЬреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╛рд╣рд░реА рдлрд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред

@icambron рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 'рдПрди-рдпреВрдПрд╕' рдореЗрдВ рд▓реЛрдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреБрдЬрд░рддрд╛ рд╣реИ рддреЛ рдЖрдк рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдирд╣реАрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрд╖рдг рднрд░ рдореЗрдВ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред mycate (myDate, myFormat, locale, true) рдЬрд╣рд╛рдВ рд▓реЛрдХреЗрд▓ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдПрди-рдпреВрдПрд╕' рд╣реИред рдЪреВрдВрдХрд┐ рдЙрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ) рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд▓реЛрдХреЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрди-рдпреВрдПрд╕ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╣ рдЕрднреА рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдПрди)ред

@steveccable рдЦреИрд░, рдпрд╣ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдерд╛ред рдЬрдм рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл "рдПрди" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ "рдПрди-рдпреВрдПрд╕" рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдЯреВрдЯ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЙрдбрд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдпрд╣ рдХреЗрд╡рд▓ рдЗрдирд╛рдпрдд рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдФрд░ рдЕрдЧрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЬрд╛рдирд╛ рд╣реИред рддреЛ рдЖрдкрдХреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛: рдХреНрдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ?

@icambron рдореЗрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

E/ReactNativeJS: Requiring unknown module "./locale/en-us".
E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
                                                                Process: com.myApp, PID: 30054
                                                                com.facebook.react.common.JavascriptException: Requiring unknown module "./locale/en-US"., stack:
                                                                o<strong i="7">@2</strong>:742
                                                                n<strong i="8">@2</strong>:426
                                                                i<strong i="9">@2</strong>:278
                                                                t<strong i="10">@2</strong>:210
                                                                Xe<strong i="11">@648</strong>:16702
                                                                nt<strong i="12">@648</strong>:17804
                                                                gt<strong i="13">@648</strong>:22583
                                                                yt<strong i="14">@648</strong>:22460
                                                                wt<strong i="15">@648</strong>:23200
                                                                c<strong i="16">@648</strong>:1112
                                                                parse<strong i="17">@645</strong>:1536
                                                                render<strong i="18">@643</strong>:2923
                                                                _renderValidatedComponentWithoutOwnerOrContext<strong i="19">@141</strong>:7295
                                                                _renderValidatedComponent<strong i="20">@141</strong>:7462
                                                                performInitialMount<strong i="21">@141</strong>:3012
                                                                mountComponent<strong i="22">@141</strong>:2056
                                                                mountComponent<strong i="23">@132</strong>:205
                                                                performInitialMount<strong i="24">@141</strong>:3162
                                                                mountComponent<strong i="25">@141</strong>:2056
                                                                mountComponent<strong i="26">@132</strong>:205
                                                                performInitialMount<strong i="27">@141</strong>:3162
                                                                mountComponent<strong i="28">@141</strong>:2056
                                                                mountComponent<strong i="29">@132</strong>:205

рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдирд╛, рдХреНрдпреЛрдВрдХрд┐ getLocale рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдХреБрдВрдЬреА ('en-US') рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрднреА рднреА 'en' рд╕реЗ рдореЗрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд▓реЛрдбрд▓реЛрдХреЗрд▓ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ selectLocale рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЪрдпрди рд╕реВрдЪреА рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд╣рд▓реЗ 'рдПрди-рдпреВрдПрд╕' рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ 'рдПрди' рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдРрдк рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕рд░рдгреА рдереАред
рдпрд╣ рднреА рдЕрдЬреАрдм рддрдереНрдп рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдПрдХ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдлрд┐рд░ рднреА рджреБрд░реНрдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред

EDIT 2: рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдбрд┐рдмрдЧ (__DEV__) рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ 'рдПрди' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЧрд┐рд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ __PROD__ рдореЗрдВ рдЗрддрдиреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрдлреЛрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдХреНрд╖рдг рдореЗрдВ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИред

EDIT 3: рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЗрдПрд╕ рдбреЙрдХреНрд╕ рд╕реЗ, "рдпрджрд┐ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рддреА рд╣реИрдВ рдФрд░ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреА рд╣реИрдВред" рддреЛ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдмрдЪрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рдкрд╛рд╕ (рдЖрджрд░реНрд╢ рд╕реЗ рдХрдо) рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдЬрдм рднреА рдореЗрд░рд╛ рдХреЛрдб 'en-US' рдХреЗ рдХрд┐рд╕реА рд▓реЛрдХрд▓ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 'en' рдХреЗ рд▓реЛрдХреЗрд▓ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдХрд┐ рдпрд╣ рди рддреЛ рдПрди-рдпреВрдПрд╕ рдХреЛ рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рдКрдкрд░ред

@steveccable

рдпрд╣ рднреА рдЕрдЬреАрдм рддрдереНрдп рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдПрдХ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдлрд┐рд░ рднреА рджреБрд░реНрдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред

рд╕рд╣реА рд╣реИ, рдореИрдВ рдпрд╣реА рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдЕрд╕рдлрд▓ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рднрдпрд╛рд╡рд╣ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреАред рдореИрдВ en-US рдЬреНрдЮрд╛рди рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛; рд╣рдо рдЕрднреА рднреА рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрдордмреИрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдлрд▓рддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ en рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╛рд▓рдмреИрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╣рдореЗрдВ рдЗрдирд╛рдпрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрди-рдпреВрдПрд╕ рдХреЛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреА рддрд░рд╣)ред рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдХреЗ рд╕рдВрдкрд╛рджрди рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 'en-US' рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ред

рдХреЛрд╢рд┐рд╢ / рдХреИрдЪ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдУрд╣, рдореБрдЭреЗ рд╡рд╣ рд╕рдВрдкрд╛рджрди рдпрд╛рдж рдЖ рдЧрдпрд╛ред рдореЗрд░рд╛ рднреА рдпрд╣реА рдЕрдиреБрдорд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред

@steveccable
рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рд▓реАрдЬ рдмрд┐рд▓реНрдб рдореЗрдВ рд╕рдЯреАрдХ рдХреНрд░реИрд╢ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлреНрд░реЗрдВрдЪ рд▓реЛрдХреЗрд▓ рдХреЗ рд╕рд╛рде) рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рджрд┐рди рдХрд╛ рдХрд╛рдо рдерд╛ ed

E/ReactNativeJS: Requiring unknown module "./locale/fr".
(...)

рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:

import 'moment/locale/fr';

рд╢рд╛рдпрдж рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ

рд╕реНрдерд╛рдиреАрдп рдЗрдирдкреБрдЯ рдХреЛ рд╕реИрдирд┐рдЯрд╛рдЗрдЬ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдбрд░рд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рдЖрд╡рд╢реНрдпрдХрддрд╛ () рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЧреИрд░-рдореМрдЬреВрджрд╛ рд▓реЛрдХреЗрд▓ рдпрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ('рдмреНрд▓рд╛-рдмреНрд▓рд╛рд╣' рдХрд╣рддрд╛ рд╣реВрдВ) рднреЗрдЬрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдХрд╣реАрдВ рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЗ рд░рдХреНрд╖рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рдмрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рди рдХрд░реЗред

рдореБрдЭреЗ рд╕рдВрд╕реНрдХрд░рдг 2.19.2 рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛рдПрдБ рдЖрдИрдВ, рдпрд╣рд╛рдБ рдЙрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдмрджрд▓рд╛ рд╣реИ https://github.com/moment/moment/compare/29afed6...328d51e рдлрдВрдХреНрд╢рди рдЕрдкрдбреЗрдЯрд▓реЛрдХреЗрд▓ рдиреЗ рд▓реЛрдбрд▓реЛрдХреЗрд▓ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ https рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореВрд▓ рдХрд╛рд░рдг рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЪрд░ https://github.com/facebook/react-native/issues/6391 рджреНрд╡рд╛рд░рд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ

рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ en-gb рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд▓ рднрд░ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ locales[name] рдореЗрдВ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдкрдбрд╝рддреА рд╣реИ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ RN рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди RN рдХреЗ рд▓рд┐рдП рдкрд▓ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ facebook # 69 рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣реИред рдореИрдВ @jeanlauliac рд╕реЗ рдмрд╛рдд рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╕ рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: рдХрдИ рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рд╣рдо рдЧрддрд┐рд╢реАрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░рд╛, рдЬрдм рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЬрд┐рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдРрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдлреЗрд╕рдмреБрдХ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрддреАрдд рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдФрд░ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдордЬреЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИред рдореЗрдЯреНрд░реЛ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕рд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрд░реНрдж рд╣реЛрдЧрд╛ред

рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдУрдкрди рд╕реЛрд░реНрд╕ рд░реЗрдкреЛ рдЕрднреА рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЖрдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрдЯреНрд░реЛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдлрдмреА рдореЗрдВ рдХрднреА рднреА рдЕрдзрд┐рдХ рд▓реЛрдЧ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореЗрдЯреНрд░реЛ рдХреЛ рдПрдХ рдЯрди рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреЛрд░ рдореЗрдВ рдХрдИ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╕реНрд░реЛрдд рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдХ рджреЛ рдорд╣реАрдиреЗ рдореЗрдВ рдпрд╣ рд░реЗрдкреЛ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдХреБрдЫ рд╕рдордп рджреАрдЬрд┐рдПред

рдЖрд░рдПрди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рд▓реЛрдХреЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ (рд╢рд╛рдпрдж рд╕реНрдХреНрд░реАрди рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм "xx-XX" рд▓реЛрдХреЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ) рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, "xx-XX" рдХреЗ рд░реВрдк рдореЗрдВ locale рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╕реНрдерд╛рди рд╣реИред

moment.locale(locale.indexOf("-") === -1 ? locale : locale.substr(0, locale.indexOf('-')))

рдпрд╣ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

https://stackoverflow.com/a/47260841/175825 рдЖрдкрдХреЛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдХрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕ рдЬрд╛рджреВ рдХреА рд╡рдЬрд╣ рд╕реЗ, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝реЗ рдХреИрд▓реЗрдВрдбрд░ рдирд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреА рддрд░рд╣ рддрд┐рдерд┐рдпрд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mm/yy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ BigCalendar.momentLocalizer() рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рднреА рд╕реНрдерд╛рди рднрд░реА рд╣реБрдИ рд╣реИред

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝реЗ-рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЦреЛрд▓ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд╕реНрдерд╛рдиреАрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рдХреА рдЙрдореНрдореАрдж рдереА, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдФрд░ рдЕрдЧрд▓реЗ рдПрдХ?

рдмрд╕ en-us рд▓реЛрдХреЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬрд╛рджреВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯред

рдмрд╕ рдПрди-рдпреВрдПрд╕ рд▓реЛрдХреЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬрд╛рджреВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╕реНрдкреЗрдирд┐рд╢ ( es-ES => es ) рдЬреИрд╕реА рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдордмреИрдХ рдХрд░рддреА рд╣реИрдВред

рдЬреЛ рдХреЛрдИ рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдХреБрдЫ рдмрдврд╝рдд рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рдЖрд░рдПрди рдХреЗ рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг require рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рджреМрд░рд╛рди рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

import moment from 'moment/min/moment-with-locales.min.js';

// locale is the locale detected by react-native-device-info
// ts is the time
export const formatTime = (locale, ts) => {
const m = moment.utc(ts);
locale = chooseMomentLocale(locale);
m.locale(locale);
// other logic to determine whether to show the time as "9:43 pm", "yesterday", or "7/8/2018"

return formattedTime;
}

/**
 * Checks if the device locale is available in moment and returns the locale to be loaded
 * <strong i="7">@param</strong>  {string} locale locale to be checked
 * <strong i="8">@return</strong> {string}        locale to be loaded by moment
 */
const chooseMomentLocale = (locale) => {
  // make the locale lower case 
  // will fix crashes caused by "en-GB" (instead of "en-gb") not being found
  locale = locale.toLowerCase();  
  if (moment.locales().includes(locale)) { // check if the locale is included in the array returned by `locales()` which (in this case) tells us which locales moment will support
    return locale;
  } else if (moment.locales().includes(locale.substring(0, 2))) { 
    // check if the first two letters of the locale are included in the array returned by `locales()` which (in this case) tells us which locales moment will support
    // will fixes crashes caused by "en-US" not being found, as we'll tell moment to load "en" instead
    return locale.substring(0, 2);
  }
    // use "en-gb" (the default language and locale for my app) as a fallback if we can't find any other locale
    return 'en-gb'; 
};

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рдФрд░ рдореЛрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЕрд░реНрдерд╛рдд

import moment from 'moment'
import 'moment/min/locales'

(рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, moment/min/moment-with-locales рднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рдХреБрдЫ рдЕрдиреНрдп рд╕реНрд╡рд░реВрдкрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рдерд╛ред)

рдпрд╣ рдПрдХ рд╕реБрдкрд░ рдХрд╖реНрдЯрдкреНрд░рдж рдореБрджреНрджрд╛ рд╣реИред

рдХреНрдпрд╛ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдкреВрд░реЗ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рд╕реЛрдЪрдирд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ 'рдПрди-рдпреВрдПрд╕' рдХреЛ рд╣рд╛рд░реНрдбрдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдпреВрдПрд╕ рдореЗрдВ рд╣реИрдВ? рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЬрдм 'рдПрди-рдпреВрдПрд╕' рдХреЗ рдПрдХ рд▓реЛрдХреЗрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ред рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕рд┐рд░рджрд░реНрдж рдХрд╛ рдХреЛрдИ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдХреИрд╕реЗ, рдлрд┐рд░ рдореБрдЭреЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред (рдореИрдВ рдПрдВрдЧреБрд▓рд░ рдореЗрдВ рдбреЗрдЯ рдкрд┐рдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред

рдореИрдВ рдЗрд╕ Angular рдореЗрдВ рдбреЗрдЯрд╛рдЗрдо рдкрд┐рдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рдПрди-рдЬреАрдмреА рдЬреИрд╕реА рдХреБрдЫ рдЪреАрдЬрд╝реЛрдВ рдХреЛ LOCALE рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИред рдХрд╛рд╢ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╕рдордЭ рдкрд╛рддрд╛

image

рдЖрд░рдПрди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рд▓реЛрдХреЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ (рд╢рд╛рдпрдж рд╕реНрдХреНрд░реАрди рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм "xx-XX" рд▓реЛрдХреЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ) рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдк рдореЗрдВ, locale рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд▓реЛрдХреЗрд▓ "xx-XX" рд░реВрдк рдореЗрдВ рд╣реИред

moment.locale(locale.indexOf("-") === -1 ? locale : locale.substr(0, locale.indexOf('-')))

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ i18n рдФрд░ momentjs рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

// imports:
import moment from 'moment';
import i18n from './i18n';
import 'moment/locale/fr';

// constructor: 
moment.locale(i18n.locale.indexOf('-') === -1 ? i18n.locale : i18n.locale.substr(0, i18n.locale.indexOf('-')));

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ "рдХреНрд╖рдг" рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ: "^ 2.22.2",
рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреЛрдИ рд╕реБрдзрд╛рд░?

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░реВрдБрдЧрд╛ред

  1. рдПрди-рдпреВрдПрд╕ рдХреЛ рдХреБрдЫ рдЫрд┐рдкреЗ рд╣реБрдП рдбрд┐рдлреЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЕрдиреНрдп рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рд╣реЛрддреЗ рд╣реИрдВред
  2. рдмрд┐рдирд╛ рдПрди-рд▓реЛрдХреЗрд▓ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╕реАрдбреАрдПрди рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
  3. рдкрд▓ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреАрдорд╛рд░ рдХреЛ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрди-рдпреВрдПрд╕ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмреБрд░рд╛ рдХреЛрдб рдЧрдВрдз рд╣реИред

рдореИрдВ рднреА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрддреНрдкрд╛рджрди рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрд╢реА рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдереАред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ @ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:

function parseLocaleForMoment (language) {
  if (language.indexOf('-') === -1) return language
  else return language.substr(0, language.indexOf('-'))
}

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░рдПрди рдкрд▓ рдХреЗ рд╕рд╛рде рдЗрддрдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рджреЗрд╢реА рдлреЙрд░реНрдореЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐, рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓реЗрдЯ рдкреНрд░реВрдлред

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛:

const subLocales = [
  'ar-tn',
  'ar-dz',
  'ar-kw',
  'ar-ma',
  'ar-sa',
  'ar-ly',
  'de-at',
  'de-ch',
  'en-sg',
  'en-au',
  'en-ca',
  'en-gb',
  'en-ie',
  'en-nz',
  'es-us',
  'es-do',
  'fr-ca',
  'fr-ch',
  'gom-latn',
  'hy-am',
  'pa-in',
  'pt-br',
  'sr-cyrl',
  'tl-ph',
  'tlh',
  'tet',
  'ms-my',
  'it-ch',
  'tzl',
  'tzm',
  'tzm-latn',
  'nl-be',
  'ug-cn',
  'uz-latn',
  'zh-cn',
  'zh-hk',
  'zh-tw'
];

let momentLocale = i18n.locale.toLowerCase();

if (!subLocales.includes(momentLocale)) {
  momentLocale = momentLocale.substring(0, 2);
}

moment.locale(momentLocale);

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рджреЗрд╢реА @tapz рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди iOS рдкрд░ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ: / рдореБрдЭреЗ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ zh рд▓реЛрдХреЗрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ: /

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рд▓реАрдХреГрдд рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП zh рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Https://gist.github.com/jacobbubu/1836273 рджреЗрдЦреЗрдВ

@ rajivshah3 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ zh_Hant_HK рдерд╛ рдЬреЛ рдХрд┐ рдЯрд╛реЕрдк рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрдм рдореИрдВ рдЖрдкрдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдЖрдкрдХреЗ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж h

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛, рдХреЗрд╡рд▓ рдЖрд░рдПрди рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рд▓рдЧрддрд╛ рд╣реИред

import 'moment/locale/fr';
import 'moment/locale/es';
import 'moment/locale/de';
import 'moment/locale/en-gb';
import 'moment/locale/es-us';

const toMomentLocale = locale => {
  let momentLocale = locale;
  momentLocale = momentLocale.replace('_', '-').toLowerCase();
  momentLocale = ['en-gb', 'en-us'].includes(locale)
    ? momentLocale
    : momentLocale.split('-')[0];
  return momentLocale;
};

рдЬрдм рддрдХ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ en ) рдФрд░ рдпрд╣ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред рднрд╛рд╖рд╛ рдХреЛрдб рдХреЗ -region рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реНрдЯреНрд░рд┐рдк рдХрд░рдирд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

1) рдЖрдк рд▓реЛрдХреЗрд▓ рдХреА рдХреНрд╖реЗрддреНрд░реАрдп рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред
2) рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рд╡рд╣ рд╡рд┐рдзрд┐ рдЖрдЧреЗ рджреБрд░реНрдШрдЯрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧреАред рдЪреАрдиреА ( zh ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдореЗрдВрдЯрдЬреЗрдПрд╕ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ zh-cn , zh-hk рдФрд░ zh-tw рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд▓реЛрдХрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдРрдк рддреБрд░рдВрдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪреАрдиреА рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕ рдПрдХ рдФрд╕рддрди ~ 800 рдорд┐рд▓рд┐рдпрди рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред

рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЕрд╕реНрдерд╛рдпреА (рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреИрдЯрд╢рд┐рдЯ) рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ:

const locale = 'zh-cn'; // or en-US etc
const languageCode = moment.locale(locale.indexOf("-") === -1 ? locale : locale.substr(0, locale.indexOf('-'))); // now 'zh', 'en' etc. Thanks <strong i="14">@adesmet</strong> 
let momentJsLocale;
switch(languageCode.toLowerCase()) {
  case 'zh':
    // No 'zh' locale exists in MomentJS. App will crash in production if used.
    momentJsLocale = 'zh-cn';
    break;
  case 'pa':
    momentJsLocale = 'pa-in';
    break;
  case 'hy':
    momentJsLocale = 'hy-am';
    break;
  default:
    momentJsLocale = languageCode.toLowerCase();
}
moment.locale(momentJsLocale);

@adammcarth рд╣рд╛рдп, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ RN рдХреЗ рд▓рд┐рдП рдкрд▓ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЦрдмрд░ рд╣реИ?

рдпрд╣ рдЕрднреА en-gb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ред

рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ; @ рд╕рд┐рдЗрдорд┐рд▓рд╛ ред

рдЬрдм рдореИрдВрдиреЗ рд▓реБрдкрдХрди рдХреЛ рдЯрд╛рдЗрдордкрд┐рдХрд░ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рддреЛ рд╡реЗ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡реЗ 'рдПрди-рдпреВрдПрд╕' рд▓реЛрдХреЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред

@steveccable рдЦреИрд░, рдпрд╣ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдерд╛ред рдЬрдм рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл "рдПрди" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ "рдПрди-рдпреВрдПрд╕" рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдЯреВрдЯ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЙрдбрд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; _it рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреГрдкрд╛рдкреВрд░реНрд╡рдХ рдЕрд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП_ рдФрд░ рдЕрдЧрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЬрд╛рдПрдВред рддреЛ рдЖрдкрдХреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛: рдХреНрдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде 'рдПрди-рдпреВрдПрд╕' рдпрд╛ рдЕрдиреНрдп рд╡реИрдз рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдбрд┐рдмрдЧрд░ рдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рдмреНрд░реЗрдХ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдкрд░ рдмрд╛рд░-рдмрд╛рд░ рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 'рдПрди-рдпреВрдПрд╕' рдХреЗ рд░реВрдк рдореЗрдВ рдЗрддрдиреЗ рдмрдбрд╝реЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдФрд░ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдмрдбрд╝реЗ рджрд░реНрд╢рдХреЛрдВ / рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдЗрди рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЧрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдПред

рдореИрдВрдиреЗ @slorber рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрдд

const toMomentLocale = (locale) => {
  let newLocale = locale.replace('_', '-').toLowerCase();
  let tryLocales = [newLocale, newLocale.split('-')[0]];
  for (let i = 0; i < tryLocales.length; i++) {
    if (moment.locales().indexOf(tryLocales[i]) >= 0) return tryLocales[i];
  }
  return 'en-us';
};

// use it like this:
let m = moment();
m.locale(toMomentLocale('zh_CN')).format('LLL'); // "2019х╣┤12цЬИ11цЧеф╕КхНИ9чВ╣33хИЖ" -- used "zh-cn"
moment.locale(toMomentLocale('ja_JP'));
moment().format('LLL') // 2019х╣┤12цЬИ11цЧе 09:34 -- falls back to "ja"

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛, рдЖрд░рдПрди рдЙрддреНрдкрд╛рджрди IOS рдореЛрдб рдореЗрдВ рд╣реАред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рд▓рдЧрддрд╛ рд╣реИред

"рдкрд▓" рд╕реЗ рдЖрдпрд╛рдд рдкрд▓;
рдЖрдпрд╛рдд 'рдкрд▓ / рд╕реНрдерд╛рди / рддреЛрдВ';

рдЗрд╕реЗ рдбрд┐рдмреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛, @jorodriguez рдХреЛ рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ ЁЯШв

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ рд╣реИ -> https://github.com/tonix-tuft/moment-utl

npm install --save moment moment-utl

рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдкрд▓ рдХреЗ рд╕рднреА рд╕рдорд░реНрдерд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import { allSupportedLocales, allSupportedLocalesMap } from "moment-utl";

const locales = allSupportedLocales(); // As an array: ["af", "ar", "ar-dz", "ar-kw", "ar-ly", "ar-ma", "ar-sa", "ar-tn", "az", "be", "bg", ...,  "en", ..., "zh-tw"]

const localesMap = allSupportedLocalesMap(); // As an object: { "af": 1, "ar": 2, "ar-dz": 3, "ar-kw": 4, "ar-ly": 5, "ar-ma": 6, "ar-sa": 7, "ar-tn": 8, "az": 9, "be": 10, ..., "en": 27, "zh-tw": 128 };

moment-utl рд╕рд╣рдХрд░реНрдореА moment рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА moment рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ
moment/locale рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА moment dev рдирд┐рд░реНрднрд░рддрд╛ рдкреИрдХреЗрдЬ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, moment рдПрдХ рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ ES6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ allSupportedLocales рдФрд░ allSupportedLocalesMap рджреЛрдиреЛрдВ moment рд╕рд╛рде рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ moment-utl рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ moment рдХрд┐рд╕реА рджрд┐рди рдирдпрд╛ рд▓реЛрдХреЗрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП), рддреЛ рдЖрдк рдЙрди рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ moment-utl-locales рд╕реНрдХреНрд░рд┐рдкреНрдЯ moment-utl рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИред

рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ npx рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

npm install -g npx    # Install npx if you don't have it yet
npx moment-utl-locales    # Run this command from your project's root folder

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд░реЛрд▓рдЕрдк рдпрд╛ рд╡реЗрдмрдкреИрдХ (рдЬреЛ рднреА рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХреЛрдб рдмрдВрдбрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╕ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреЗ рдмрд░реНрдирд░ рдХреЗ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕реНрдерд╛рди рд╕рд░рдгреА рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдмрдВрдбрд▓

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛!

@Adammcarth рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ, рдХреГрдкрдпрд╛ рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдЙрддреНрддрд░ рджреЗрдЦреЗрдВ :

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдиреЗ рдУрдбреВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рдХреНрд╕ рдПрди-рдпреВ рдлрд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рд╣реИред рдЖрд╣ред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдХреНрд╖рдг рдПрди-рдпреВ рдлрд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЛрдбрд░ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдПрди" рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА рдпрд╣ рдЕрднреА рднреА рдЖрд░рдПрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ ...

image

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдиреЗ рдУрдбреВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рдХреНрд╕ рдПрди-рдпреВ рдлрд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рд╣реИред рдЖрд╣ред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдХреНрд╖рдг рдПрди-рдпреВ рдлрд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЛрдбрд░ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдПрди" рд╣реИ рдФрд░ рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА рдпрд╣ рдЕрднреА рднреА рдЖрд░рдПрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ ...

image

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП ЁЯСО рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди moment рдХреЗ рд▓рд┐рдП dayjs moment рд╕реНрд╡реИрдк рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЪреВрдБрдХрд┐ рд╡реЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди / API рдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП find all + replace all рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рдерд╛ред

рд╕рд┐рд░реНрдл рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рдЬреЛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Delgan picture Delgan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dogukankotan picture dogukankotan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BCup picture BCup  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

RobinvanderVliet picture RobinvanderVliet  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ