Skip to content

Commit

Permalink
perf(ui/i18n): refine some translation (#743)
Browse files Browse the repository at this point in the history
  • Loading branch information
qwqcode committed Jan 31, 2024
1 parent 45b7912 commit 2fcad53
Show file tree
Hide file tree
Showing 14 changed files with 81 additions and 69 deletions.
6 changes: 6 additions & 0 deletions ui/artalk-sidebar/src/i18n/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ const en = {
payload: 'Payload',
optional: 'Optional',
uploadReadyToImport: 'File uploaded and is ready for import',
artransferToolHint: 'Use the {link} to convert data to Artrans format.',
moreDetails: 'More details',
loginFailure: 'Login failure',
login: 'Login',
logout: 'Logout',
Expand Down Expand Up @@ -152,6 +154,8 @@ const zhCN: typeof en = {
payload: '启动参数',
optional: '可选',
uploadReadyToImport: '文件已成功上传,可以开始导入',
artransferToolHint: '使用 {link} 将评论数据转为 Artrans 格式',
moreDetails: '查看详情',
loginFailure: '登录发生异常',
login: '登录',
logout: '退出登录',
Expand Down Expand Up @@ -232,6 +236,8 @@ const zhTW: typeof en = {
payload: '有效載荷',
optional: '選填',
uploadReadyToImport: '檔案已上傳並準備匯入',
artransferToolHint: '使用 {link} 將評論數據轉換為 Artrans 格式。',
moreDetails: '查看詳情',
loginFailure: '登入失敗',
login: '登入',
logout: '登出',
Expand Down
6 changes: 4 additions & 2 deletions ui/artalk-sidebar/src/pages/transfer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ function padWithZeros(vNumber: number, width: number) {
}
return numAsString
}
const artransferToolHint = computed(() => t('artransferToolHint', { link: '__LINK__' }).replace('__LINK__', `<a href="https://artalk.js.org/guide/transfer.html" target="_blank">${t('artransfer')}</a>`))
</script>

<template>
Expand All @@ -150,7 +152,7 @@ function padWithZeros(vNumber: number, width: number) {
<div class="atk-label atk-data-file-label">Artrans {{ t('dataFile') }}</div>
<FileUploader :api-url="uploadApiURL" @done="fileUploaded">
<template v-slot:tip>
使用「<a href="https://artalk.js.org/guide/transfer.html" target="_blank">转换工具</a>」将评论数据转为 Artrans 格式
<span v-html="artransferToolHint" />
</template>
<template v-slot:done-msg>
{{ t('uploadReadyToImport') }}
Expand All @@ -175,7 +177,7 @@ function padWithZeros(vNumber: number, width: number) {
<div class="atk-label">{{ t('payload') }} ({{ t('optional') }})</div>
<textarea name="AtkPayload" v-model="importParams.payload"></textarea>
<span class="atk-desc">
参考「<a href="https://artalk.js.org/guide/transfer.html" target="_blank">文档 · 数据迁移</a>
<a href="https://artalk.js.org/guide/transfer.html" target="_blank">{{ t('moreDetails') }}</a>
</span>
<button class="atk-btn" name="AtkSubmit" @click="startImportTask()">{{ t('import') }}</button>
</div>
Expand Down
2 changes: 0 additions & 2 deletions ui/artalk-sidebar/src/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,6 @@ body {
background: transparent;
border: 2px solid var(--at-color-bg-light);
line-height: $form-height;
letter-spacing: 2em;
text-indent: 2em; // center
cursor: pointer;
outline: none;
padding: 0 20px;
Expand Down
2 changes: 1 addition & 1 deletion ui/artalk/src/comment/renders/reply-to.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default function renderReplyTo(r: Render) {
$nick.innerText = `@${r.cConf.replyTo.nick}`
$nick.onclick = () => { r.comment.getActions().goToReplyComment() }
let replyContent = marked(r.cConf.replyTo.content)
if (r.cConf.replyTo.is_collapsed) replyContent = `[${Utils.htmlEncode(r.ctx.$t('collapsed'))}]`
if (r.cConf.replyTo.is_collapsed) replyContent = `[${r.ctx.$t('collapsed')}]`
r.$replyTo.querySelector<HTMLElement>('.atk-content')!.innerHTML = replyContent
r.$body.prepend(r.$replyTo)
}
5 changes: 3 additions & 2 deletions ui/artalk/src/components/error-dialog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ export interface ErrorDialogOptions {
}

export function showErrorDialog(opts: ErrorDialogOptions) {
const errEl = Utils.createElement(`<span>${opts.errMsg}${$t('listLoadFailMsg')}<br/></span>`)
const errEl = Utils.createElement(`<span><span class="error-message"></span><br/><br/></span>`)
errEl.querySelector<HTMLElement>('.error-message')!.innerText = `${$t('listLoadFailMsg')}\n${opts.errMsg}`

if (opts.retryFn) {
const $retryBtn = Utils.createElement(`<span style="cursor:pointer;">${$t('listRetry')}</span>`)
Expand All @@ -22,7 +23,7 @@ export function showErrorDialog(opts: ErrorDialogOptions) {
}

if (opts.onOpenSidebar) {
const $openSidebar = Utils.createElement(`<span atk-only-admin-show> | <span style="cursor:pointer;">${$t('open')+$t('ctrlCenter')}</span></span>`)
const $openSidebar = Utils.createElement(`<span atk-only-admin-show> | <span style="cursor:pointer;">${$t('openName', { name: $t('ctrlCenter') })}</span></span>`)
errEl.appendChild($openSidebar)
$openSidebar.onclick = () => opts.onOpenSidebar && opts.onOpenSidebar()
}
Expand Down
2 changes: 1 addition & 1 deletion ui/artalk/src/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const defaults: ArtalkConfig = {
versionCheck: true,
useBackendConf: true,

locale: 'zh-CN',
locale: 'en',
}

if (ARTALK_LITE) {
Expand Down
5 changes: 3 additions & 2 deletions ui/artalk/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const en = {
openComment: 'Open Comment',
closeComment: 'Close Comment',
listLoadFailMsg: 'Failed to load comments',
listRetry: 'Click to retry',
listRetry: 'Retry',
loadMore: 'Load More',

/* Comment */
Expand Down Expand Up @@ -81,7 +81,8 @@ const en = {
updateMsg: 'Please update Artalk {name} to get the full experience',
currentVersion: 'Current Version',
ignore: 'Ignore',
open: 'Open'
open: 'Open',
openName: 'Open {name}',
}

export type I18n = typeof en
Expand Down
3 changes: 2 additions & 1 deletion ui/artalk/src/i18n/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import en, { I18n, I18nKeys } from './en'
import zhCN from './zh-CN'
import { GLOBAL_LOCALES_KEY } from './external'
import * as Utils from '../lib/utils'

export type * from './en'

Expand Down Expand Up @@ -60,7 +61,7 @@ export function t(key: I18nKeys, args: {[key: string]: string} = {}) {
let str = LocaleDict?.[key] || key
str = str.replace(/\{\s*(\w+?)\s*\}/g, (_, token) => args[token] || '')

return str
return Utils.htmlEncode(str)
}

export default t
87 changes: 44 additions & 43 deletions ui/artalk/src/i18n/jp.ts
Original file line number Diff line number Diff line change
@@ -1,75 +1,75 @@
import { defineLocaleExternal } from './external'

export default defineLocaleExternal('jp', {
/* エディタ */
placeholder: 'コメントを残す',
/* Editor */
placeholder: '内容を入力してください...',
noComment: 'コメントなし',
send: '送信',
save: '保存',
send: 'コメントを送信',
save: 'コメントを保存',
nick: 'ニックネーム',
email: 'メール',
email: 'Eメール',
link: 'ウェブサイト',
emoticon: '絵文字',
preview: 'プレビュー',
image: '画像',
uploadFail: 'アップロードに失敗しました',
commentFail: 'コメントに失敗しました',
restoredMsg: 'コンテンツが復元されました',
onlyAdminCanReply: '管理者のみが返信できます',
uploadLoginMsg: 'アップロードするには、名前とメールアドレスを入力してください',
restoredMsg: '内容が自動的に復元されました',
onlyAdminCanReply: '管理者のみがコメントできます',
uploadLoginMsg: '名前とメールアドレスを入力してからアップロードしてください',

/* リスト */
counter: '{count} コメント',
sortLatest: '最新のもの',
sortOldest: '最も古い',
sortBest: 'ベスト',
/* List */
counter: '{count}件のコメント',
sortLatest: '最新',
sortOldest: '最古',
sortBest: '人気',
sortAuthor: '著者',
openComment: 'コメントを開く',
closeComment: 'コメントを閉じる',
listLoadFailMsg: 'コメントの読み込みに失敗しました',
listRetry: 'クリックで再試行',
openComment: 'コメントを表示',
closeComment: 'コメントを非表示',
listLoadFailMsg: 'コメントリストのデータを取得できません',
listRetry: '再試行するにはクリック',
loadMore: 'もっと読み込む',

/* コメント */
/* Comment */
admin: '管理者',
reply: '返信',
voteUp: 'アップ',
voteDown: 'ダウン',
voteUp: '賛成',
voteDown: '反対',
voteFail: '投票に失敗しました',
readMore: '続きを読む',
actionConfirm: '確認',
collapse: '折りたたむ',
actionConfirm: '操作を確認',
collapse: '折り畳む',
collapsed: '折りたたまれた',
collapsedMsg: 'このコメントは折りたたまれました',
collapsedMsg: 'このコメントはシステムまたは管理者によって折りたたまれました',
expand: '展開',
approved: '承認されました',
approved: '承認済み',
pending: '保留中',
pendingMsg: '保留中、コメント投稿者にのみ表示されます',
pendingMsg: '審査中、自分自身のみが表示できます。',
edit: '編集',
editCancel: '編集をキャンセル',
delete: '削除',
deleteConfirm: '確認',
pin: 'ピン',
unpin: 'ピン外し',
deleteConfirm: '削除を確認',
pin: 'ピン留め',
unpin: 'ピン留めを解除',

/* 時間 */
/* Time */
seconds: '秒前',
minutes: '分前',
hours: '時間前',
days: '数日前',
days: '日前',
now: 'たった今',

/* チェッカー */
adminCheck: '管理者パスワードを入力してください:',
captchaCheck: '続けるにはCAPTCHAを入力してください:',
/* Checker */
adminCheck: '管理者として認証するにはパスワードを入力してください:',
captchaCheck: '続行するにはキャプチャを入力してください:',
confirm: '確認',
cancel: '取消',
cancel: 'キャンセル',

/* サイドバー */
msgCenter: 'メッセージ',
ctrlCenter: 'コンソール',
/* Sidebar */
msgCenter: '通知センター',
ctrlCenter: 'コントロールセンター',

/* 一般 */
/* General */
frontend: 'フロントエンド',
backend: 'バックエンド',
loading: '読み込み中',
Expand All @@ -78,10 +78,11 @@ export default defineLocaleExternal('jp', {
editFail: '編集に失敗しました',
deleting: '削除中',
deleteFail: '削除に失敗しました',
reqGot: 'リクエストを取得しました',
reqAborted: 'リクエストがタイムアウトしたか、予期せず終了した',
updateMsg: 'フルな体験をするためには、Artalk {name} をアップデートしてください',
reqGot: 'リクエストが受信されました',
reqAborted: 'リクエストがタイムアウトまたは予期せず中止されました',
updateMsg: '完全な体験を得るにはArtalk {name}を更新してください',
currentVersion: '現在のバージョン',
ignore: '無視する',
open: 'オープン',
ignore: '無視',
open: '開く',
openName: '{name}を開く',
}, ['jp-JP'])
1 change: 1 addition & 0 deletions ui/artalk/src/i18n/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ const zhCN: I18n = {
currentVersion: '当前版本',
ignore: '忽略',
open: '打开',
openName: '打开{name}',
}

export default zhCN
23 changes: 12 additions & 11 deletions ui/artalk/src/i18n/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import { defineLocaleExternal } from './external'

export default defineLocaleExternal('zh-TW', {
/* Editor */
placeholder: '鍵入內容...',
placeholder: '輸入內容...',
noComment: '「此時無聲勝有聲」',
send: '發送評論',
save: '保存評論',
nick: '昵稱',
email: '郵箱',
nick: '暱稱',
email: '電子郵件',
link: '網址',
emoticon: '表情',
preview: '預覽',
Expand All @@ -21,7 +21,7 @@ export default defineLocaleExternal('zh-TW', {
/* List */
counter: '{count} 條評論',
sortLatest: '最新',
sortOldest: '最早',
sortOldest: '最舊',
sortBest: '最熱',
sortAuthor: '作者',
openComment: '打開評論',
Expand All @@ -38,9 +38,9 @@ export default defineLocaleExternal('zh-TW', {
voteFail: '投票失敗',
readMore: '閱讀更多',
actionConfirm: '確認操作',
collapse: '摺疊',
collapsed: '已摺疊',
collapsedMsg: '該評論已被系統或管理員摺疊',
collapse: '折疊',
collapsed: '已折疊',
collapsedMsg: '該評論已被系統或管理員折疊',
expand: '展開',
approved: '已審',
pending: '待審',
Expand All @@ -60,8 +60,8 @@ export default defineLocaleExternal('zh-TW', {
now: '剛剛',

/* Checker */
adminCheck: '鍵入密碼來驗證管理員身份:',
captchaCheck: '鍵入驗證碼繼續:',
adminCheck: '輸入密碼來驗證管理員身份:',
captchaCheck: '輸入驗證碼繼續:',
confirm: '確認',
cancel: '取消',

Expand All @@ -78,10 +78,11 @@ export default defineLocaleExternal('zh-TW', {
editFail: '修改失敗',
deleting: '刪除中',
deleteFail: '刪除失敗',
reqGot: '請求響應',
reqGot: '請求已接收',
reqAborted: '請求超時或意外終止',
updateMsg: '請更新 Artalk {name} 以獲得完整體驗',
currentVersion: '當前版本',
ignore: '忽略',
open: '打开',
open: '打開',
openName: '打開{name}',
})
4 changes: 2 additions & 2 deletions ui/artalk/src/plugins/editor/emoticons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export default class Emoticons extends EditorPlug {
}

if (!Array.isArray(data)) {
Ui.setError(this.$panel!, "表情包数据必须为 Array/Object/String 类型")
Ui.setError(this.$panel!, `[${$t('emoticon')}] Data must be of Array/Object/String type`)
Ui.hideLoading(this.$panel!)
return []
}
Expand Down Expand Up @@ -144,7 +144,7 @@ export default class Emoticons extends EditorPlug {
} catch (err) {
Ui.hideLoading(this.$panel!)
console.error('[Emoticons] Load Failed:', err)
Ui.setError(this.$panel!, `${$t('emoticon')}${$t('loadFail')} ${String(err)}`)
Ui.setError(this.$panel!, `[${$t('emoticon')}] ${$t('loadFail')}: ${String(err)}`)
return []
}
}
Expand Down
2 changes: 1 addition & 1 deletion ui/artalk/src/plugins/editor/submit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export default class Submit extends EditorPlug {
} catch (err: any) {
// submit error
console.error(err)
this.kit.useEditor().showNotify(`${$t('commentFail')}${err.msg || String(err)}`, 'e')
this.kit.useEditor().showNotify(`${$t('commentFail')}: ${err.msg || String(err)}`, 'e')
return
} finally {
this.kit.useEditor().hideLoading()
Expand Down
2 changes: 1 addition & 1 deletion ui/artalk/src/plugins/editor/upload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ export default class Upload extends EditorPlug {
}
} catch (err: any) {
console.error(err)
this.kit.useEditor().showNotify(`${$t('uploadFail')}${err.msg}`, 'e')
this.kit.useEditor().showNotify(`${$t('uploadFail')}: ${err.msg}`, 'e')
}
if (!!resp && resp.public_url) {
let imgURL = resp.public_url as string
Expand Down

0 comments on commit 2fcad53

Please sign in to comment.