From a9370ef261ea03c02e4e8c40bdfe24e97a8692fb Mon Sep 17 00:00:00 2001 From: "Jingwei.Zhang" Date: Tue, 28 Mar 2023 10:15:57 +0800 Subject: [PATCH] feat: update zh-cn to zh-hans Update zh-cn to zh-hans, and update the icon when switch language Change-Id: I3e6d3e8aebec4584f863282082a11b36d7cee193 --- Gruntfile.js | 2 +- doc/source/test/catalog-introduction.rst | 2 +- docs/en/test/2-catalog-introduction.md | 2 +- docs/zh/test/2-catalog-introduction.md | 2 +- .../Layout/GlobalHeader/AvatarDropdown.jsx | 6 +++--- src/core/i18n.js | 16 +++++++++------- src/locales/index.js | 4 ++-- src/locales/{zh.json => zh-hans.json} | 0 src/utils/constants.js | 2 +- src/utils/translate.js | 4 ++-- src/utils/translate.spec.js | 10 +++++----- test/e2e/support/commands.js | 9 ++++----- test/e2e/support/common.js | 2 +- test/unit/locales/{zh-CN.js => zh-hans.js} | 0 14 files changed, 31 insertions(+), 30 deletions(-) rename src/locales/{zh.json => zh-hans.json} (100%) rename test/unit/locales/{zh-CN.js => zh-hans.js} (100%) diff --git a/Gruntfile.js b/Gruntfile.js index 97a52148..6dfe5a2a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -19,7 +19,7 @@ module.exports = function (grunt) { src: ['src/**/*.{jsx,js}'], dest: 'src', options: { - lngs: ['en', 'zh', 'ko-kr'], + lngs: ['en', 'zh-hans', 'ko-kr'], removeUnusedKeys: true, sort: true, keySeparator: false, diff --git a/doc/source/test/catalog-introduction.rst b/doc/source/test/catalog-introduction.rst index 38878b13..5db13eb2 100644 --- a/doc/source/test/catalog-introduction.rst +++ b/doc/source/test/catalog-introduction.rst @@ -79,7 +79,7 @@ Catalog Introduction ├── local-storage-mock.js ( Storage mock function in local) ├── locales (Translation files used when testing internationalization) │ ├── en-US.js - │ └── zh-CN.js + │ └── zh-hans.js ├── setup-tests.js (setup uni test) └── svg-mock.js (Mock of image loading) diff --git a/docs/en/test/2-catalog-introduction.md b/docs/en/test/2-catalog-introduction.md index c9294875..e6d71069 100644 --- a/docs/en/test/2-catalog-introduction.md +++ b/docs/en/test/2-catalog-introduction.md @@ -77,7 +77,7 @@ test ├── local-storage-mock.js ( Storage mock function in local) ├── locales (Translation files used when testing internationalization) │ ├── en-US.js - │ └── zh-CN.js + │ └── zh-hans.js ├── setup-tests.js (setup uni test) └── svg-mock.js (Mock of image loading) ``` diff --git a/docs/zh/test/2-catalog-introduction.md b/docs/zh/test/2-catalog-introduction.md index e6fb69f1..714bee3a 100644 --- a/docs/zh/test/2-catalog-introduction.md +++ b/docs/zh/test/2-catalog-introduction.md @@ -77,7 +77,7 @@ test ├── local-storage-mock.js (本地存储的mock函数) ├── locales (测试国际化时使用的翻译文件) │ ├── en-US.js - │ └── zh-CN.js + │ └── zh-hans.js ├── setup-tests.js (配置单元测试) └── svg-mock.js (图片加载的mock) ``` diff --git a/src/components/Layout/GlobalHeader/AvatarDropdown.jsx b/src/components/Layout/GlobalHeader/AvatarDropdown.jsx index 7f7be8c6..2ffc8bda 100644 --- a/src/components/Layout/GlobalHeader/AvatarDropdown.jsx +++ b/src/components/Layout/GlobalHeader/AvatarDropdown.jsx @@ -68,7 +68,7 @@ export class AvatarDropdown extends React.Component { const { length } = SUPPORT_LOCALES; if (length > 3) { const options = SUPPORT_LOCALES.map((it) => ({ - label: it.shortName.toLocaleUpperCase(), + label: it.icon.toLocaleUpperCase(), value: it.value, })); return ( @@ -83,7 +83,7 @@ export class AvatarDropdown extends React.Component { ); } const btns = SUPPORT_LOCALES.map((item, index) => { - const { value, shortName } = item; + const { value, icon } = item; return ( <> {index !== length - 1 && /} diff --git a/src/core/i18n.js b/src/core/i18n.js index f3147b3c..ad3d22a1 100644 --- a/src/core/i18n.js +++ b/src/core/i18n.js @@ -20,24 +20,26 @@ import SLI18n from 'utils/translate'; import { setLocalStorageItem } from 'utils/local-storage'; import locales from '../locales'; +// shortName: the i18n name in the api +// icon: the icon of switch language in ui const SUPPORT_LOCALES = [ { name: 'English', value: 'en', shortName: 'en', - icon: 'us', + icon: 'en', }, { name: '简体中文', - value: 'zh-cn', + value: 'zh-hans', shortName: 'zh', - icon: 'cn', + icon: 'zh', }, { name: '한글', value: 'ko-kr', - shortName: 'kr', - icon: 'kr', + shortName: 'ko', + icon: 'ko', }, ]; @@ -96,12 +98,12 @@ const setLocale = (lang) => { return lang; }; -const isLocaleZh = getLocale() === 'zh-cn'; +const isLocaleZh = getLocale() === 'zh-hans'; const init = () => { const lang = getLocale(); - if (lang === 'zh') { + if (lang === 'zh-hans') { moment.locale('zh', { relativeTime: { s: '1秒', diff --git a/src/locales/index.js b/src/locales/index.js index 10edd06e..5b1bda18 100644 --- a/src/locales/index.js +++ b/src/locales/index.js @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import zhData from './zh.json'; +import zhHansData from './zh-hans.json'; import enData from './en.json'; import krData from './ko-kr.json'; export default { - 'zh-cn': zhData, + 'zh-hans': zhHansData, en: enData, 'ko-kr': krData, }; diff --git a/src/locales/zh.json b/src/locales/zh-hans.json similarity index 100% rename from src/locales/zh.json rename to src/locales/zh-hans.json diff --git a/src/utils/constants.js b/src/utils/constants.js index 8b03c227..7e6d92f7 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -38,7 +38,7 @@ export const MODULE_KIND_MAP = { }; export const LANG_MAP = { - zh: 'zh-cn', + 'zh-hans': 'zh-hans', en: 'en', }; diff --git a/src/utils/translate.js b/src/utils/translate.js index a94e7c53..7e3541d0 100644 --- a/src/utils/translate.js +++ b/src/utils/translate.js @@ -31,7 +31,7 @@ class SLI18n { constructor() { this.options = { currentLocale: null, // Current locale such as 'en' - locales: {}, // app locale data like {"en":{"key1":"value1"},"zh-cn":{"key1":"值1"}} + locales: {}, // app locale data like {"en":{"key1":"value1"},"zh-hans":{"key1":"值1"}} // eslint-disable-next-line no-console warningHandler: function warn(...msg) { console.warn(...msg); @@ -179,7 +179,7 @@ class SLI18n { * Initialize properties and load CLDR locale data according to currentLocale * @param {Object} options * @param {string} options.currentLocale Current locale such as 'en' - * @param {string} options.locales App locale data like {"en":{"key1":"value1"},"zh-cn":{"key1":"值1"}} + * @param {string} options.locales App locale data like {"en":{"key1":"value1"},"zh-hans":{"key1":"值1"}} * @returns {Promise} */ init(options = {}) { diff --git a/src/utils/translate.spec.js b/src/utils/translate.spec.js index 4f4b2b50..75a266c2 100644 --- a/src/utils/translate.spec.js +++ b/src/utils/translate.spec.js @@ -13,19 +13,19 @@ // limitations under the License. import React from 'react'; -import zhCN from '../../test/unit/locales/zh-CN'; +import zhHans from '../../test/unit/locales/zh-hans'; import enUS from '../../test/unit/locales/en-US'; import ReactIntlUniversal from './translate'; const intl = new ReactIntlUniversal(); const locales = { 'en-US': enUS, - 'zh-CN': zhCN, + 'zh-hans': zhHans, }; describe('test translate', () => { it('Set specific locale', () => { - intl.init({ locales, currentLocale: 'zh-CN' }); + intl.init({ locales, currentLocale: 'zh-hans' }); expect(intl.get('SIMPLE')).toBe('简单'); intl.init({ locales, currentLocale: 'en-US' }); expect(intl.get('SIMPLE')).toBe('Simple'); @@ -178,7 +178,7 @@ describe('test translate', () => { }) ).toBe('You have 10 photos.'); - intl.init({ locales, currentLocale: 'zh-CN' }); + intl.init({ locales, currentLocale: 'zh-hans' }); expect( intl.get('PHOTO', { num: 1, @@ -242,7 +242,7 @@ describe('test translate', () => { }); it('Uses fallback locale if key not found in currentLocale', () => { - intl.init({ locales, currentLocale: 'zh-CN', fallbackLocale: 'en-US' }); + intl.init({ locales, currentLocale: 'zh-hans', fallbackLocale: 'en-US' }); expect(intl.get('ONLY_IN_ENGLISH')).toBe('ONLY_IN_ENGLISH'); }); diff --git a/test/e2e/support/commands.js b/test/e2e/support/commands.js index e2cf21a0..3530f0fc 100644 --- a/test/e2e/support/commands.js +++ b/test/e2e/support/commands.js @@ -14,11 +14,10 @@ import getTitle from './common'; -Cypress.Commands.add('setLanguage', () => { +Cypress.Commands.add('setLanguage', (value) => { const exp = Date.now() + 864000000; - const language = Cypress.env('language') || 'zh'; - const value = language === 'zh' ? 'zh-cn' : 'en'; - const langValue = { value, expires: exp }; + const language = Cypress.env('language') || 'en'; + const langValue = { value: value || language, expires: exp }; window.localStorage.setItem('lang', JSON.stringify(langValue)); }); @@ -136,7 +135,7 @@ Cypress.Commands.add('clickMenu', (fatherIndex, sonIndex) => { Cypress.Commands.add('setLanguageByPage', () => { const language = Cypress.env('language'); - if (language === 'zh') { + if (language === 'zh-hans') { return; } cy.log('change language to english'); diff --git a/test/e2e/support/common.js b/test/e2e/support/common.js index c27d6087..72973738 100644 --- a/test/e2e/support/common.js +++ b/test/e2e/support/common.js @@ -13,7 +13,7 @@ // limitations under the License. const getTitle = (title) => { - const language = Cypress.env('language') || 'zh'; + const language = Cypress.env('language') || 'en'; if (language === 'en') { return title; } diff --git a/test/unit/locales/zh-CN.js b/test/unit/locales/zh-hans.js similarity index 100% rename from test/unit/locales/zh-CN.js rename to test/unit/locales/zh-hans.js