mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-17 15:09:31 +00:00
Merge pull request #1045 from Allengl/feat/ja_JP
feat: add language ja_JP
This commit is contained in:
@@ -168,6 +168,11 @@
|
||||
<a href="https://github.com/RedhairHambagu" style="display:inline-block;width:80px"><img src="https://avatars.githubusercontent.com/u/129669334" width="64px;" alt="RedhairHambagu"/><br/><sub><b>RedhairHambagu</b></sub></a><br/><a href="https://github.com/tangly1024/NotionNext/commits?author=RedhairHambagu" title="RedhairHambagu" >🔧 🐛</a>
|
||||
</td>
|
||||
|
||||
<td align="center">
|
||||
<a href="https://github.com/Allengl" style="display:inline-block;width:80px"><img src="https://avatars.githubusercontent.com/u/58612763" width="64px;" alt="Allen"/><br/><sub><b>Allen</b></sub></a><br/><a href="https://github.com/tangly1024/NotionNext/commits?author=Allengl" title="Allengl" >🔧 🐛</a>
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
53
lib/lang.js
53
lib/lang.js
@@ -4,47 +4,58 @@ import zhHK from './lang/zh-HK'
|
||||
import zhTW from './lang/zh-TW'
|
||||
import frFR from './lang/fr-FR'
|
||||
import trTR from './lang/tr-TR'
|
||||
import jaJP from './lang/ja-JP'
|
||||
import cookie from 'react-cookies'
|
||||
import { getQueryVariable, isBrowser, mergeDeep } from './utils'
|
||||
|
||||
/**
|
||||
* 在这里配置所有支持的语言
|
||||
* 国家-地区
|
||||
*/
|
||||
const lang = {
|
||||
'en-US': enUS,
|
||||
'zh-CN': zhCN,
|
||||
'zh-HK': zhHK,
|
||||
'zh-TW': zhTW,
|
||||
'fr-FR': frFR,
|
||||
'tr-TR': trTR
|
||||
'tr-TR': trTR,
|
||||
'ja-JP': jaJP
|
||||
}
|
||||
|
||||
export default lang
|
||||
|
||||
/**
|
||||
* 获取当前语言字典
|
||||
* 如果匹配到完整的“国家-地区”语言,则显示国家的语言
|
||||
* @returns 不同语言对应字典
|
||||
*/
|
||||
export function generateLocaleDict(langString) {
|
||||
let userLocale = lang['en-US']
|
||||
const supportedLocales = Object.keys(lang)
|
||||
let userLocale
|
||||
|
||||
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
|
||||
case 'tr-tr':
|
||||
userLocale = lang['tr-TR']
|
||||
break
|
||||
default:
|
||||
userLocale = lang['en-US']
|
||||
// 将语言字符串拆分为语言和地区代码,例如将 "zh-CN" 拆分为 "zh" 和 "CN"
|
||||
const [language, region] = langString.split(/[-_]/)
|
||||
|
||||
// 优先匹配语言和地区都匹配的情况
|
||||
const specificLocale = `${language}-${region}`
|
||||
if (supportedLocales.includes(specificLocale)) {
|
||||
userLocale = lang[specificLocale]
|
||||
}
|
||||
|
||||
// 然后尝试匹配只有语言匹配的情况
|
||||
if (!userLocale) {
|
||||
const languageOnlyLocales = supportedLocales.filter(locale => locale.startsWith(language))
|
||||
if (languageOnlyLocales.length > 0) {
|
||||
userLocale = lang[languageOnlyLocales[0]]
|
||||
}
|
||||
}
|
||||
|
||||
// 如果还没匹配到,则返回最接近的语言包
|
||||
if (!userLocale) {
|
||||
const fallbackLocale = supportedLocales.find(locale => locale.startsWith('en'))
|
||||
userLocale = lang[fallbackLocale]
|
||||
}
|
||||
|
||||
return mergeDeep({}, lang['en-US'], userLocale)
|
||||
}
|
||||
|
||||
|
||||
59
lib/lang/ja-JP.js
Normal file
59
lib/lang/ja-JP.js
Normal file
@@ -0,0 +1,59 @@
|
||||
export default {
|
||||
LOCALE: 'ja-JP',
|
||||
NAV: {
|
||||
INDEX: 'ホーム',
|
||||
RSS: '購読',
|
||||
SEARCH: '検索',
|
||||
ABOUT: 'このサイトについて',
|
||||
NAVIGATOR: 'ナビゲーション',
|
||||
MAIL: 'メール',
|
||||
ARCHIVE: 'アーカイブ'
|
||||
},
|
||||
COMMON: {
|
||||
MORE: 'さらに',
|
||||
NO_MORE: 'それ以上ありません',
|
||||
LATEST_POSTS: '最新の記事',
|
||||
TAGS: 'タグ',
|
||||
NO_TAG: 'タグなし',
|
||||
CATEGORY: 'カテゴリ',
|
||||
SHARE: 'シェア',
|
||||
SCAN_QR_CODE: 'WeChatで共有',
|
||||
URL_COPIED: 'リンクがコピーされました!',
|
||||
TABLE_OF_CONTENTS: '目次',
|
||||
RELATE_POSTS: '関連する記事',
|
||||
COPYRIGHT: '免責事項',
|
||||
AUTHOR: '作成者',
|
||||
URL: 'リンク',
|
||||
ANALYTICS: '統計',
|
||||
POSTS: '記事',
|
||||
ARTICLE: '記事',
|
||||
VISITORS: '人の訪問者',
|
||||
VIEWS: '回の閲覧',
|
||||
COPYRIGHT_NOTICE: 'この記事はCC BY-NC-SA 4.0 ライセンスの下でライセンスされています。転載する場合には出典を明らかにしてください。',
|
||||
RESULT_OF_SEARCH: '個の検索結果',
|
||||
ARTICLE_DETAIL: '記事の詳細',
|
||||
PASSWORD_ERROR: 'パスワードが違います!',
|
||||
ARTICLE_LOCK_TIPS: 'この記事はロックされています。アクセスパスワードを入力してください。',
|
||||
SUBMIT: '送信',
|
||||
POST_TIME: '公開日',
|
||||
LAST_EDITED_TIME: '最終更新日',
|
||||
RECENT_COMMENTS: '最近のコメント',
|
||||
DEBUG_OPEN: 'デバッグをオンにする',
|
||||
DEBUG_CLOSE: 'デバッグをオフにする',
|
||||
THEME_SWITCH: 'テーマの切り替え',
|
||||
ANNOUNCEMENT: 'お知らせ',
|
||||
START_READING: '読み始める'
|
||||
},
|
||||
PAGINATION: {
|
||||
PREV: '前のページ',
|
||||
NEXT: '次のページ'
|
||||
},
|
||||
SEARCH: {
|
||||
ARTICLES: '記事を検索',
|
||||
TAGS: 'タグを検索'
|
||||
},
|
||||
POST: {
|
||||
BACK: '前のページに戻る',
|
||||
TOP: '上に戻る'
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user