From 8e395ab4eee317a46ef98a5e702fbb128465518d Mon Sep 17 00:00:00 2001 From: qfdk Date: Mon, 7 Nov 2022 08:32:37 +0100 Subject: [PATCH 1/2] feat: add lang fr --- lib/lang.js | 12 ++++-- lib/lang/fr-FR.js | 54 +++++++++++++++++++++++++ themes/hexo/components/HeaderArticle.js | 2 +- 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 lib/lang/fr-FR.js diff --git a/lib/lang.js b/lib/lang.js index 8531761b..ea78fc2c 100644 --- a/lib/lang.js +++ b/lib/lang.js @@ -2,12 +2,15 @@ import zhCN from './lang/zh-CN' import enUS from './lang/en-US' import zhHK from './lang/zh-HK' import zhTW from './lang/zh-TW' +import frFR from '@/lib/lang/fr-FR' import { isBrowser, mergeDeep } from './utils' + const lang = { 'en-US': enUS, 'zh-CN': zhCN, 'zh-HK': zhHK, - 'zh-TW': zhTW + 'zh-TW': zhTW, + 'fr-FR': frFR } export default lang @@ -16,7 +19,7 @@ export default lang * 获取当前语言字典 * @returns 不同语言对应字典 */ -export function generateLocaleDict (langString) { +export function generateLocaleDict(langString) { let userLocale = lang['en-US'] if (!langString) { return userLocale @@ -33,6 +36,9 @@ export function generateLocaleDict (langString) { case 'zh-tw': userLocale = lang['zh-TW'] break + case 'fr-fr': + userLocale = lang['fr-FR'] + break default: userLocale = lang['zh-CN'] } @@ -44,7 +50,7 @@ export function generateLocaleDict (langString) { * 初始化语言 * 根据用户当前浏览器语言进行切换 */ -export function initLocale (locale, changeLocale) { +export function initLocale(locale, changeLocale) { if (isBrowser()) { const targetLocale = generateLocaleDict(window.navigator.language) if (JSON.stringify(locale) !== JSON.stringify(targetLocale)) { diff --git a/lib/lang/fr-FR.js b/lib/lang/fr-FR.js new file mode 100644 index 00000000..30089a70 --- /dev/null +++ b/lib/lang/fr-FR.js @@ -0,0 +1,54 @@ +export default { + LOCALE: 'fr-FR', + NAV: { + INDEX: 'Accueil', + RSS: 'RSS', + SEARCH: 'Recherche', + ABOUT: 'À propos', + NAVIGATOR: 'Navigation', + MAIL: 'E-mail', + ARCHIVE: 'Archive' + }, + COMMON: { + MORE: 'Plus', + NO_MORE: 'Aucune donnée', + LATEST_POSTS: 'Nouveaux articles', + TAGS: 'Tags', + NO_TAG: 'Non tag', + CATEGORY: 'Catégorie(s)', + SHARE: 'Partager', + SCAN_QR_CODE: 'Scan QRCode', + URL_COPIED: "L'URL est copé!", + TABLE_OF_CONTENTS: 'Sommaire', + RELATE_POSTS: 'Article similaire', + COPYRIGHT: 'Droit d\'auteur', + AUTHOR: 'Auteur', + URL: 'Link', + ANALYTICS: 'Analytique', + POSTS: 'Articles', + ARTICLE: 'Article(s)', + VISITORS: 'Visiteurs', + VIEWS: 'Views', + COPYRIGHT_NOTICE: 'Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International (CC BY-NC-SA 4.0)', + RESULT_OF_SEARCH: 'Résultats', + ARTICLE_DETAIL: 'Plus de détails', + PASSWORD_ERROR: 'Mot de passe est incorrect!', + ARTICLE_LOCK_TIPS: 'Saisir le mot de passe pour accéder au contenu', + SUBMIT: 'Valider', + POST_TIME: 'Date de publication', + LAST_EDITED_TIME: 'Date de modification', + RECENT_COMMENTS: 'Nouveau commentaire' + }, + PAGINATION: { + PREV: 'PREV', + NEXT: 'NEXT' + }, + SEARCH: { + ARTICLES: 'Recherche les articles', + TAGS: 'Recherche les tags' + }, + POST: { + BACK: 'Page precedente', + TOP: 'Haut' + } +} diff --git a/themes/hexo/components/HeaderArticle.js b/themes/hexo/components/HeaderArticle.js index b11d7cfc..64636717 100644 --- a/themes/hexo/components/HeaderArticle.js +++ b/themes/hexo/components/HeaderArticle.js @@ -58,7 +58,7 @@ export default function HeaderArticle({ post, siteInfo }) { {BLOG.ANALYTICS_BUSUANZI_ENABLE &&
- 次访问 + {locale.COMMON.VIEWS}
} From efcc350bcb2990cb5f04c2a3da3d8d0a3e51f325 Mon Sep 17 00:00:00 2001 From: tangly Date: Mon, 7 Nov 2022 19:01:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=E5=85=BC?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/lang.js | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/lib/lang.js b/lib/lang.js index ea78fc2c..a3a2a65d 100644 --- a/lib/lang.js +++ b/lib/lang.js @@ -3,7 +3,7 @@ import enUS from './lang/en-US' import zhHK from './lang/zh-HK' import zhTW from './lang/zh-TW' import frFR from '@/lib/lang/fr-FR' -import { isBrowser, mergeDeep } from './utils' +import { getQueryVariable, isBrowser, mergeDeep } from './utils' const lang = { 'en-US': enUS, @@ -21,27 +21,23 @@ export default lang */ export function generateLocaleDict(langString) { let userLocale = lang['en-US'] - if (!langString) { - return userLocale - } - if (langString.slice(0, 2).toLowerCase() === 'zh') { - switch (langString.toLowerCase()) { - case 'zh-cn': - case 'zh-sg': - userLocale = lang['zh-CN'] - break - case 'zh-hk': - userLocale = lang['zh-HK'] - break - case 'zh-tw': - userLocale = lang['zh-TW'] - break - case 'fr-fr': - userLocale = lang['fr-FR'] - break - default: - userLocale = lang['zh-CN'] - } + + switch (langString.toLowerCase()) { + case 'zh-cn': + case 'zh-sg': + userLocale = lang['zh-CN'] + break + case 'zh-hk': + userLocale = lang['zh-HK'] + break + case 'zh-tw': + userLocale = lang['zh-TW'] + break + case 'fr-fr': + userLocale = lang['fr-FR'] + break + default: + userLocale = lang['en-US'] } return mergeDeep({}, lang['en-US'], userLocale) } @@ -52,7 +48,9 @@ export function generateLocaleDict(langString) { */ export function initLocale(locale, changeLocale) { if (isBrowser()) { - const targetLocale = generateLocaleDict(window.navigator.language) + const browserLocale = window.navigator.language + const queryLocale = getQueryVariable('lang') + const targetLocale = generateLocaleDict(queryLocale || browserLocale) if (JSON.stringify(locale) !== JSON.stringify(targetLocale)) { changeLocale(targetLocale) }