Add UI language switcher and ja/ko locales

Introduce a runtime UI language switcher and add Japanese/Korean locale support. Added _locales/ja and _locales/ko messages, updated en and zh_CN message files with new language-related keys and sendImage label. Implemented dynamic i18n handling: new i18n.js supports override messages, persistent uiLanguage in storage, and emits i18n:changed; background.js now loads override locales, updates context menu titles and listens for storage changes. Integrated dayjs locales (js/ja.js, js/ko.js) and made oper.js use a unified msg() helper and react to language changes. Added language selector UI in popup.html and styling in css/main.css.
This commit is contained in:
jonny
2026-03-05 21:03:07 +08:00
parent c8bdb918f3
commit e57a963170
11 changed files with 752 additions and 113 deletions
+21
View File
@@ -14,6 +14,9 @@
"sendLinkTo": {
"message": "Send link to Memos"
},
"sendImageTo": {
"message": "Send image to Memos"
},
"saveBtn":{
"message": "Save"
},
@@ -142,5 +145,23 @@
},
"tipSend": {
"message": "Send (Ctrl/⌘+Enter)"
},
"tipLanguage": {
"message": "Language"
},
"langAuto": {
"message": "Auto"
},
"langEnglish": {
"message": "English"
},
"langChineseSimplified": {
"message": "简体中文"
},
"langJapanese": {
"message": "日本語"
},
"langKorean": {
"message": "한국어"
}
}
+167
View File
@@ -0,0 +1,167 @@
{
"extName": {
"message": "Memos"
},
"actionTitle": {
"message": "Memos に送信"
},
"extDescription": {
"message": "memos: 軽量なセルフホスト型メモハブ。"
},
"sendTo": {
"message": "Memos に \"%s\" を送信"
},
"sendLinkTo": {
"message": "リンクを Memos に送信"
},
"sendImageTo": {
"message": "画像を Memos に送信"
},
"saveBtn": {
"message": "保存"
},
"supportedMemosVersion": {
"message": "Memos v0.24.0+ に対応(テスト済み: 0.24.0 / 0.25.0 / 0.26.x"
},
"placeApiUrl": {
"message": "Memos サイトURL"
},
"placeApiTokens": {
"message": "Memos アクセストークン"
},
"placeContent": {
"message": "今のメモは…"
},
"lockPrivate": {
"message": "非公開"
},
"lockProtected": {
"message": "保護"
},
"lockPublic": {
"message": "公開"
},
"submitBtn": {
"message": "送信"
},
"placeHideInput": {
"message": "既定の「非公開」タグ名"
},
"placeShowInput": {
"message": "既定の「全員に公開」タグ名"
},
"uploadedListTitle": {
"message": "アップロード済みファイル(ドラッグで並べ替え)"
},
"uploadedListEmpty": {
"message": "アップロード済みファイルはありません"
},
"tipReorder": {
"message": "ドラッグして並べ替え"
},
"tipDeleteAttachment": {
"message": "削除"
},
"attachmentDeleteSuccess": {
"message": "削除しました"
},
"attachmentDeleteFailed": {
"message": "削除に失敗しました 😭"
},
"picDrag": {
"message": "画像をここにドラッグしてアップロード"
},
"picCancelDrag": {
"message": "アップロードをキャンセル"
},
"picUploading": {
"message": "画像をアップロード中..."
},
"picSuccess": {
"message": "アップロード完了"
},
"picFailed": {
"message": "アップロード失敗"
},
"picPending": {
"message": "画像のアップロードが進行中です"
},
"saveSuccess": {
"message": "保存しました!"
},
"searchNow": {
"message": "何を探していますか?"
},
"searchNone": {
"message": "別のキーワードを試してください!"
},
"archiveSuccess": {
"message": "アーカイブ成功 😊"
},
"archiveFailed": {
"message": "アーカイブ失敗 😭"
},
"getTabFailed": {
"message": "タブの取得に失敗 😭"
},
"memoUploading": {
"message": "送信中"
},
"memoSuccess": {
"message": "成功!😊"
},
"memoFailed": {
"message": "失敗!😭"
},
"invalidToken": {
"message": "無効なトークンまたはURL 😭"
},
"tipOpenSite": {
"message": "Memos を開く"
},
"tipSettings": {
"message": "設定"
},
"tipTags": {
"message": "タグを挿入"
},
"tipTodo": {
"message": "ToDo を挿入"
},
"tipUpload": {
"message": "ファイルをアップロード"
},
"tipLink": {
"message": "現在のタブのリンクを挿入"
},
"tipRandom": {
"message": "ランダムメモ"
},
"tipSearch": {
"message": "検索"
},
"tipVisibility": {
"message": "公開範囲"
},
"tipSend": {
"message": "送信(Ctrl/⌘+Enter"
},
"tipLanguage": {
"message": "言語"
},
"langAuto": {
"message": "自動"
},
"langEnglish": {
"message": "English"
},
"langChineseSimplified": {
"message": "简体中文"
},
"langJapanese": {
"message": "日本語"
},
"langKorean": {
"message": "한국어"
}
}
+167
View File
@@ -0,0 +1,167 @@
{
"extName": {
"message": "Memos"
},
"actionTitle": {
"message": "Memos 보내기"
},
"extDescription": {
"message": "memos: 가볍고 셀프호스팅 가능한 메모 허브."
},
"sendTo": {
"message": "Memos로 \"%s\" 보내기"
},
"sendLinkTo": {
"message": "링크를 Memos로 보내기"
},
"sendImageTo": {
"message": "이미지를 Memos로 보내기"
},
"saveBtn": {
"message": "저장"
},
"supportedMemosVersion": {
"message": "Memos v0.24.0+ 호환 (테스트됨: 0.24.0 / 0.25.0 / 0.26.x)"
},
"placeApiUrl": {
"message": "Memos 사이트 URL"
},
"placeApiTokens": {
"message": "Memos 액세스 토큰"
},
"placeContent": {
"message": "지금 떠오른 생각은..."
},
"lockPrivate": {
"message": "비공개"
},
"lockProtected": {
"message": "보호됨"
},
"lockPublic": {
"message": "공개"
},
"submitBtn": {
"message": "전송"
},
"placeHideInput": {
"message": "기본 '비공개' 태그 이름"
},
"placeShowInput": {
"message": "기본 '모두 공개' 태그 이름"
},
"uploadedListTitle": {
"message": "업로드된 파일(드래그로 순서 변경)"
},
"uploadedListEmpty": {
"message": "업로드된 파일이 없습니다"
},
"tipReorder": {
"message": "드래그하여 순서 변경"
},
"tipDeleteAttachment": {
"message": "삭제"
},
"attachmentDeleteSuccess": {
"message": "삭제됨"
},
"attachmentDeleteFailed": {
"message": "삭제 실패 😭"
},
"picDrag": {
"message": "이미지를 드래그하여 업로드"
},
"picCancelDrag": {
"message": "업로드 취소"
},
"picUploading": {
"message": "이미지 업로드 중..."
},
"picSuccess": {
"message": "업로드 완료"
},
"picFailed": {
"message": "업로드 실패"
},
"picPending": {
"message": "이미지 업로드가 진행 중입니다"
},
"saveSuccess": {
"message": "저장 성공!"
},
"searchNow": {
"message": "무엇을 찾고 있나요?"
},
"searchNone": {
"message": "다른 단어를 시도해 보세요!"
},
"archiveSuccess": {
"message": "보관 성공 😊"
},
"archiveFailed": {
"message": "보관 실패 😭"
},
"getTabFailed": {
"message": "탭 가져오기 실패 😭"
},
"memoUploading": {
"message": "전송 중"
},
"memoSuccess": {
"message": "성공! 😊"
},
"memoFailed": {
"message": "실패! 😭"
},
"invalidToken": {
"message": "유효하지 않은 토큰 또는 URL 😭"
},
"tipOpenSite": {
"message": "Memos 열기"
},
"tipSettings": {
"message": "설정"
},
"tipTags": {
"message": "태그 삽입"
},
"tipTodo": {
"message": "할 일 삽입"
},
"tipUpload": {
"message": "파일 업로드"
},
"tipLink": {
"message": "현재 탭 링크 삽입"
},
"tipRandom": {
"message": "랜덤 메모"
},
"tipSearch": {
"message": "검색"
},
"tipVisibility": {
"message": "공개 범위"
},
"tipSend": {
"message": "전송(Ctrl/⌘+Enter)"
},
"tipLanguage": {
"message": "언어"
},
"langAuto": {
"message": "자동"
},
"langEnglish": {
"message": "English"
},
"langChineseSimplified": {
"message": "简体中文"
},
"langJapanese": {
"message": "日本語"
},
"langKorean": {
"message": "한국어"
}
}
+18
View File
@@ -145,5 +145,23 @@
},
"tipSend": {
"message": "发送(Ctrl/⌘+Enter"
},
"tipLanguage": {
"message": "语言"
},
"langAuto": {
"message": "跟随浏览器"
},
"langEnglish": {
"message": "English"
},
"langChineseSimplified": {
"message": "简体中文"
},
"langJapanese": {
"message": "日本語"
},
"langKorean": {
"message": "한국어"
}
}