소스 검색

[RN] Add builtin translations

master
Lyubo Marinov 7 년 전
부모
커밋
e1f967869a

+ 66
- 81
react/features/base/i18n/BuiltinLanguages.native.js 파일 보기

1
+// @flow
2
+
1
 import i18next from 'i18next';
3
 import i18next from 'i18next';
2
 
4
 
3
 /**
5
 /**
4
- * Collection of builtin languages.
6
+ * The builtin languages.
5
  */
7
  */
6
-const languages = [
8
+const _LANGUAGES = {
7
 
9
 
8
     // Bulgarian
10
     // Bulgarian
9
-    {
10
-        name: 'bg',
11
-        mainResource: require('../../../../lang/main-bg'),
12
-        langResource: require('../../../../lang/languages-bg')
11
+    'bg': {
12
+        languages: require('../../../../lang/languages-bg'),
13
+        main: require('../../../../lang/main-bg')
13
     },
14
     },
14
 
15
 
15
     // German
16
     // German
16
-    {
17
-        name: 'de',
18
-        mainResource: require('../../../../lang/main-de'),
19
-        langResource: require('../../../../lang/languages-de')
17
+    'de': {
18
+        languages: require('../../../../lang/languages-de'),
19
+        main: require('../../../../lang/main-de')
20
     },
20
     },
21
 
21
 
22
     // Esperanto
22
     // Esperanto
23
-    {
24
-        name: 'eo',
25
-        mainResource: require('../../../../lang/main-eo'),
26
-        langResource: require('../../../../lang/languages-eo')
23
+    'eo': {
24
+        languages: require('../../../../lang/languages-eo'),
25
+        main: require('../../../../lang/main-eo')
27
     },
26
     },
28
 
27
 
29
     // Spanish
28
     // Spanish
30
-    {
31
-        name: 'es',
32
-        mainResource: require('../../../../lang/main-es'),
33
-        langResource: require('../../../../lang/languages-es')
29
+    'es': {
30
+        languages: require('../../../../lang/languages-es'),
31
+        main: require('../../../../lang/main-es')
34
     },
32
     },
35
 
33
 
36
     // French
34
     // French
37
-    {
38
-        name: 'fr',
39
-        mainResource: require('../../../../lang/main-fr'),
40
-        langResource: require('../../../../lang/languages-fr')
35
+    'fr': {
36
+        languages: require('../../../../lang/languages-fr'),
37
+        main: require('../../../../lang/main-fr')
41
     },
38
     },
42
 
39
 
43
     // Armenian
40
     // Armenian
44
-    {
45
-        name: 'hy',
46
-        mainResource: require('../../../../lang/main-hy'),
47
-        langResource: require('../../../../lang/languages-hy')
41
+    'hy': {
42
+        languages: require('../../../../lang/languages-hy'),
43
+        main: require('../../../../lang/main-hy')
48
     },
44
     },
49
 
45
 
50
     // Italian
46
     // Italian
51
-    {
52
-        name: 'it',
53
-        mainResource: require('../../../../lang/main-it'),
54
-        langResource: require('../../../../lang/languages-it')
47
+    'it': {
48
+        languages: require('../../../../lang/languages-it'),
49
+        main: require('../../../../lang/main-it')
55
     },
50
     },
56
 
51
 
57
     // Norwegian Bokmal
52
     // Norwegian Bokmal
58
-    {
59
-        name: 'nb',
60
-        mainResource: require('../../../../lang/main-nb'),
61
-        langResource: require('../../../../lang/languages-nb')
53
+    'nb': {
54
+        languages: require('../../../../lang/languages-nb'),
55
+        main: require('../../../../lang/main-nb')
62
     },
56
     },
63
 
57
 
64
     // Occitan
58
     // Occitan
65
-    {
66
-        name: 'oc',
67
-        mainResource: require('../../../../lang/main-oc'),
68
-        langResource: require('../../../../lang/languages-oc')
59
+    'oc': {
60
+        languages: require('../../../../lang/languages-oc'),
61
+        main: require('../../../../lang/main-oc')
69
     },
62
     },
70
 
63
 
71
     // Polish
64
     // Polish
72
-    {
73
-        name: 'pl',
74
-        mainResource: require('../../../../lang/main-pl'),
75
-        langResource: require('../../../../lang/languages-pl')
65
+    'pl': {
66
+        languages: require('../../../../lang/languages-pl'),
67
+        main: require('../../../../lang/main-pl')
76
     },
68
     },
77
 
69
 
78
     // Portuguese (Brazil)
70
     // Portuguese (Brazil)
79
-    {
80
-        name: 'ptBR',
81
-        mainResource: require('../../../../lang/main-ptBR'),
82
-        langResource: require('../../../../lang/languages-ptBR')
71
+    'ptBR': {
72
+        languages: require('../../../../lang/languages-ptBR'),
73
+        main: require('../../../../lang/main-ptBR')
83
     },
74
     },
84
 
75
 
85
     // Russian
76
     // Russian
86
-    {
87
-        name: 'ru',
88
-        mainResource: require('../../../../lang/main-ru'),
89
-        langResource: require('../../../../lang/languages-ru')
77
+    'ru': {
78
+        languages: require('../../../../lang/languages-ru'),
79
+        main: require('../../../../lang/main-ru')
90
     },
80
     },
91
 
81
 
92
     // Slovak
82
     // Slovak
93
-    {
94
-        name: 'sk',
95
-        mainResource: require('../../../../lang/main-sk'),
96
-        langResource: require('../../../../lang/languages-sk')
83
+    'sk': {
84
+        languages: require('../../../../lang/languages-sk'),
85
+        main: require('../../../../lang/main-sk')
97
     },
86
     },
98
 
87
 
99
     // Slovenian
88
     // Slovenian
100
-    {
101
-        name: 'sl',
102
-        mainResource: require('../../../../lang/main-sl'),
103
-        langResource: require('../../../../lang/languages-sl')
89
+    'sl': {
90
+        languages: require('../../../../lang/languages-sl'),
91
+        main: require('../../../../lang/main-sl')
104
     },
92
     },
105
 
93
 
106
     // Swedish
94
     // Swedish
107
-    {
108
-        name: 'sv',
109
-        mainResource: require('../../../../lang/main-sv'),
110
-        langResource: require('../../../../lang/languages-sv')
95
+    'sv': {
96
+        languages: require('../../../../lang/languages-sv'),
97
+        main: require('../../../../lang/main-sv')
111
     },
98
     },
112
 
99
 
113
     // Turkish
100
     // Turkish
114
-    {
115
-        name: 'tr',
116
-        mainResource: require('../../../../lang/main-tr'),
117
-        langResource: require('../../../../lang/languages-tr')
101
+    'tr': {
102
+        languages: require('../../../../lang/languages-tr'),
103
+        main: require('../../../../lang/main-tr')
118
     },
104
     },
119
 
105
 
120
     // Chinese (China)
106
     // Chinese (China)
121
-    {
122
-        name: 'zhCN',
123
-        mainResource: require('../../../../lang/main-zhCN'),
124
-        langResource: require('../../../../lang/languages-zhCN')
107
+    'zhCN': {
108
+        languages: require('../../../../lang/languages-zhCN'),
109
+        main: require('../../../../lang/main-zhCN')
125
     }
110
     }
126
-];
111
+};
112
+
113
+// Register all builtin languages with the i18n library.
114
+for (const name in _LANGUAGES) { // eslint-disable-line guard-for-in
115
+    const { languages, main } = _LANGUAGES[name];
127
 
116
 
128
-/**
129
- * Registers all builtin languages with the i18n library.
130
- */
131
-for (const language of languages) {
132
     i18next.addResourceBundle(
117
     i18next.addResourceBundle(
133
-        language.name,
134
-        'main',
135
-        language.mainResource,
118
+        name,
119
+        'languages',
120
+        languages,
136
         /* deep */ true,
121
         /* deep */ true,
137
         /* overwrite */ true);
122
         /* overwrite */ true);
138
     i18next.addResourceBundle(
123
     i18next.addResourceBundle(
139
-        language.name,
140
-        'languages',
141
-        language.langResource,
124
+        name,
125
+        'main',
126
+        main,
142
         /* deep */ true,
127
         /* deep */ true,
143
         /* overwrite */ true);
128
         /* overwrite */ true);
144
 }
129
 }

+ 8
- 8
react/features/base/i18n/i18next.js 파일 보기

1
-/* @flow */
1
+// @flow
2
 
2
 
3
 import i18next from 'i18next';
3
 import i18next from 'i18next';
4
 import I18nextXHRBackend from 'i18next-xhr-backend';
4
 import I18nextXHRBackend from 'i18next-xhr-backend';
70
 // Add default language which is preloaded from the source code.
70
 // Add default language which is preloaded from the source code.
71
 i18next.addResourceBundle(
71
 i18next.addResourceBundle(
72
     DEFAULT_LANGUAGE,
72
     DEFAULT_LANGUAGE,
73
-    'main',
74
-    MAIN_RESOURCES,
73
+    'languages',
74
+    LANGUAGES_RESOURCES,
75
     /* deep */ true,
75
     /* deep */ true,
76
     /* overwrite */ true);
76
     /* overwrite */ true);
77
 i18next.addResourceBundle(
77
 i18next.addResourceBundle(
78
     DEFAULT_LANGUAGE,
78
     DEFAULT_LANGUAGE,
79
-    'languages',
80
-    LANGUAGES_RESOURCES,
79
+    'main',
80
+    MAIN_RESOURCES,
81
     /* deep */ true,
81
     /* deep */ true,
82
     /* overwrite */ true);
82
     /* overwrite */ true);
83
 
83
 
84
 // Add builtin languages.
84
 // Add builtin languages.
85
-// XXX: Note we are using require here, because we want the side-effects of
86
-// the import, but imports can only be placed at the top, and it would be
87
-// too early, since i18next is not yet initialized at that point.
85
+// XXX: Note we are using require here, because we want the side-effects of the
86
+// import, but imports can only be placed at the top, and it would be too early,
87
+// since i18next is not yet initialized at that point.
88
 require('./BuiltinLanguages');
88
 require('./BuiltinLanguages');
89
 
89
 
90
 export default i18next;
90
 export default i18next;

+ 0
- 33
react/features/base/react/functions.js 파일 보기

1
-/* @flow */
2
-
3
-/* eslint-disable flowtype/space-before-type-colon */
4
-
5
-/**
6
- * Prevents further propagation of the events to be handler by a specific event
7
- * handler/listener in the capturing and bubbling phases.
8
- *
9
- * @param {Function} eventHandler - The event handler/listener which handles
10
- * events that need to be stopped from propagating.
11
- * @returns {Function} An event handler/listener to be used in place of the
12
- * specified eventHandler in order to stop the events from propagating.
13
- */
14
-export function stopEventPropagation<T>(eventHandler: (ev: Event) => T)
15
-        : (ev: Event) => T {
16
-
17
-/* eslint-enable flowtype/space-before-type-colon */
18
-
19
-    return (ev: Event): T => {
20
-        const r = eventHandler(ev);
21
-
22
-        // React Native does not propagate the press event so, for the sake of
23
-        // cross-platform compatibility, stop the propagation on Web as well.
24
-        // Additionally, use feature checking in order to deal with browser
25
-        // differences.
26
-        if (ev && ev.stopPropagation) {
27
-            ev.stopPropagation();
28
-            ev.preventDefault && ev.preventDefault();
29
-        }
30
-
31
-        return r;
32
-    };
33
-}

+ 0
- 0
react/features/base/react/functions.web.js 파일 보기


+ 33
- 32
react/features/recent-list/functions.js 파일 보기

2
 
2
 
3
 import moment from 'moment';
3
 import moment from 'moment';
4
 
4
 
5
-import { RECENT_URL_STORAGE } from './constants';
6
-
7
 import { i18next } from '../base/i18n';
5
 import { i18next } from '../base/i18n';
8
 import { parseURIString } from '../base/util';
6
 import { parseURIString } from '../base/util';
9
 
7
 
8
+import { RECENT_URL_STORAGE } from './constants';
9
+
10
 /**
10
 /**
11
- * MomentJS uses static language bundle loading, so in order to support
12
- * dynamic language selection in the app we need to load all bundles that we
13
- * support in the app.
14
- * FIXME: If we decide to support MomentJS in other features as well
15
- * we may need to move this import and the lenient matcher to the i18n feature.
11
+ * MomentJS uses static language bundle loading, so in order to support dynamic
12
+ * language selection in the app we need to load all bundles that we support in
13
+ * the app.
14
+ * FIXME: If we decide to support MomentJS in other features as well we may need
15
+ * to move this import and the lenient matcher to the i18n feature.
16
  */
16
  */
17
 require('moment/locale/bg');
17
 require('moment/locale/bg');
18
 require('moment/locale/de');
18
 require('moment/locale/de');
23
 require('moment/locale/it');
23
 require('moment/locale/it');
24
 require('moment/locale/nb');
24
 require('moment/locale/nb');
25
 
25
 
26
-// OC is not available. Please submit OC translation
27
-// to the MomentJS project.
26
+// OC is not available. Please submit OC translation to the MomentJS project.
28
 
27
 
29
 require('moment/locale/pl');
28
 require('moment/locale/pl');
30
 require('moment/locale/pt');
29
 require('moment/locale/pt');
50
                 const recentRoomDS = [];
49
                 const recentRoomDS = [];
51
 
50
 
52
                 if (recentURLs) {
51
                 if (recentURLs) {
53
-                    // we init the locale on every list render, so then it
54
-                    // changes immediately if a language change happens
55
-                    // in the app.
52
+                    // We init the locale on every list render, so then it
53
+                    // changes immediately if a language change happens in the
54
+                    // app.
56
                     const locale = _getSupportedLocale();
55
                     const locale = _getSupportedLocale();
57
 
56
 
58
                     for (const e of JSON.parse(recentURLs)) {
57
                     for (const e of JSON.parse(recentURLs)) {
114
  *
113
  *
115
  * @param {number} dateTimeStamp - The UTC timestamp to be converted to String.
114
  * @param {number} dateTimeStamp - The UTC timestamp to be converted to String.
116
  * @param {string} locale - The locale to init the formatter with. Note: This
115
  * @param {string} locale - The locale to init the formatter with. Note: This
117
- * locale must be supported by the formatter so ensure this prerequisite
118
- * before invoking the function.
116
+ * locale must be supported by the formatter so ensure this prerequisite before
117
+ * invoking the function.
119
  * @private
118
  * @private
120
  * @returns {string}
119
  * @returns {string}
121
  */
120
  */
137
  *
136
  *
138
  * @param {number} duration - The duration in MS.
137
  * @param {number} duration - The duration in MS.
139
  * @param {string} locale - The locale to init the formatter with. Note: This
138
  * @param {string} locale - The locale to init the formatter with. Note: This
140
- * locale must be supported by the formatter so ensure this prerequisite
141
- * before invoking the function.
139
+ * locale must be supported by the formatter so ensure this prerequisite before
140
+ * invoking the function.
142
  * @private
141
  * @private
143
  * @returns {string}
142
  * @returns {string}
144
  */
143
  */
165
  * @private
164
  * @private
166
  * @param {Date | number} dateToFormat - The date or duration to format.
165
  * @param {Date | number} dateToFormat - The date or duration to format.
167
  * @param {string} locale - The locale to init the formatter with. Note: This
166
  * @param {string} locale - The locale to init the formatter with. Note: This
168
- * locale must be supported by the formatter so ensure this prerequisite
169
- * before invoking the function.
167
+ * locale must be supported by the formatter so ensure this prerequisite before
168
+ * invoking the function.
170
  * @returns {Object}
169
  * @returns {Object}
171
  */
170
  */
172
 function _getLocalizedFormatter(dateToFormat: Date | number, locale: string) {
171
 function _getLocalizedFormatter(dateToFormat: Date | number, locale: string) {
184
  * @returns {string}
183
  * @returns {string}
185
  */
184
  */
186
 function _getSupportedLocale() {
185
 function _getSupportedLocale() {
187
-    const i18nLocale = i18next.language.toLowerCase();
188
-    const localeRegexp = new RegExp('^([a-z]{2,2})(-)*([a-z]{2,2})*$');
189
-    const localeResult = localeRegexp.exec(i18nLocale);
190
-
191
-    if (localeResult) {
192
-        const currentLocaleRegexp = new RegExp(
193
-            `^${localeResult[1]}(-)*${`(${localeResult[3]})*` || ''}`
194
-        );
195
-
196
-        return moment.locales().find(
197
-            lang => currentLocaleRegexp.exec(lang)
198
-        ) || 'en';
186
+    const i18nLocale = i18next.language;
187
+    let supportedLocale;
188
+
189
+    if (i18nLocale) {
190
+        const localeRegexp = new RegExp('^([a-z]{2,2})(-)*([a-z]{2,2})*$');
191
+        const localeResult = localeRegexp.exec(i18nLocale.toLowerCase());
192
+
193
+        if (localeResult) {
194
+            const currentLocaleRegexp
195
+                = new RegExp(
196
+                    `^${localeResult[1]}(-)*${`(${localeResult[3]})*` || ''}`);
197
+
198
+            supportedLocale
199
+                = moment.locales().find(lang => currentLocaleRegexp.exec(lang));
200
+        }
199
     }
201
     }
200
 
202
 
201
-    // default fallback
202
-    return 'en';
203
+    return supportedLocale || 'en';
203
 }
204
 }

Loading…
취소
저장