diff options
Diffstat (limited to 'client-web')
-rw-r--r-- | client-web/scripts/apply_translations.ts | 0 | ||||
-rw-r--r-- | client-web/scripts/find_missing_translations.ts (renamed from client-web/scripts/autogen_locale.ts) | 13 | ||||
-rw-r--r-- | client-web/scripts/reformat_json.ts | 16 | ||||
-rw-r--r-- | client-web/scripts/translate.py | 37 | ||||
-rw-r--r-- | client-web/source/locale/de.ts | 2 | ||||
-rw-r--r-- | client-web/source/locale/en.ts | 2 | ||||
-rw-r--r-- | client-web/source/locale/ja.ts | 94 | ||||
-rw-r--r-- | client-web/source/locale/mod.ts | 19 |
8 files changed, 147 insertions, 36 deletions
diff --git a/client-web/scripts/apply_translations.ts b/client-web/scripts/apply_translations.ts new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/client-web/scripts/apply_translations.ts diff --git a/client-web/scripts/autogen_locale.ts b/client-web/scripts/find_missing_translations.ts index c2f3d5b..d39590a 100644 --- a/client-web/scripts/autogen_locale.ts +++ b/client-web/scripts/find_missing_translations.ts @@ -1,10 +1,12 @@ // deno-lint-ignore-file no-explicit-any +/// <reference lib="deno.worker" /> import { LOCALES } from "../source/locale/mod.ts"; -const global_lc = "en-US" +const global_lc = "en" function traverse_object(target: any, current: any): any { if (typeof target == "string") return target + if (typeof target == "function") return undefined const out = {} as any for (const key in target) { if (!current) { @@ -20,9 +22,8 @@ function traverse_object(target: any, current: any): any { const master = LOCALES[global_lc] for (const lc in LOCALES) { if (lc == global_lc) continue - const k = JSON.stringify(traverse_object(master, LOCALES[lc])); - if (k.length <= 2) continue - console.log( - `New strings required in ${lc}:\n\t${k}` - ); + if (lc.search("-") != -1) continue + const k = traverse_object(master, LOCALES[lc]); + if (JSON.stringify(k).length <= 2) continue + console.log(JSON.stringify({ source: global_lc, target: lc, strings: k })); } diff --git a/client-web/scripts/reformat_json.ts b/client-web/scripts/reformat_json.ts new file mode 100644 index 0000000..35fc1dd --- /dev/null +++ b/client-web/scripts/reformat_json.ts @@ -0,0 +1,16 @@ + + + + +const decoder = new TextDecoder(); +let text = "" +for await (const chunk of Deno.stdin.readable) { + text += decoder.decode(chunk); +} + +for (const ob of text.split("\n")) { + if (!ob.length) continue + console.log(JSON.stringify(JSON.parse(ob), null, 4)); +} + + diff --git a/client-web/scripts/translate.py b/client-web/scripts/translate.py index 8e7de0c..2f45446 100644 --- a/client-web/scripts/translate.py +++ b/client-web/scripts/translate.py @@ -2,21 +2,30 @@ import json import sys from argostranslate import translate -srclang = "en" -dstlang = sys.argv[1] +for line in sys.stdin: + task = json.loads(line) + srclang = task["source"] + dstlang = task["target"] -installed_languages = { lang.code: lang for lang in translate.load_installed_languages() } -if srclang not in installed_languages: - raise Exception(f"need language {srclang}") -if dstlang not in installed_languages: - raise Exception(f"need language {dstlang}") -srclang = installed_languages[srclang] -dstlang = installed_languages[dstlang] -translator = srclang.get_translation(dstlang) -if translator is None: - raise Exception("no translator available") + installed_languages = { lang.code: lang for lang in translate.load_installed_languages() } + if srclang not in installed_languages: + raise Exception(f"need language {srclang}") + if dstlang not in installed_languages: + raise Exception(f"need language {dstlang}") + srclang = installed_languages[srclang] + dstlang = installed_languages[dstlang] + translator = srclang.get_translation(dstlang) + if translator is None: + raise Exception("no translator available") -print(json.loads("".join(sys.stdin))) + def tr(key, ob): + if ob == None: return None + if isinstance(ob, list): return [ tr(None,e) for e in ob ] + if isinstance(ob, dict): return { k: tr(k,v) for k, v in ob.items() } + if isinstance(ob, str): + print(f"{srclang.code}->{dstlang.code} {key}", file=sys.stderr) + return translator.translate(ob) + + print(json.dumps(tr("root", task["strings"]))) -print(translator.translate("Hello world")) diff --git a/client-web/source/locale/de.ts b/client-web/source/locale/de.ts index a427d27..6ab1109 100644 --- a/client-web/source/locale/de.ts +++ b/client-web/source/locale/de.ts @@ -5,7 +5,7 @@ */ import { LanguageStrings } from "./mod.ts"; -export const PO_DE_DE: LanguageStrings = { +export const PO_DE: LanguageStrings = { microphone: "Mikrofon", chatbox_placeholder: "Schreibe eine nachricht", chatbox_label: "Sende nachricht", diff --git a/client-web/source/locale/en.ts b/client-web/source/locale/en.ts index dbefdd4..b060de9 100644 --- a/client-web/source/locale/en.ts +++ b/client-web/source/locale/en.ts @@ -5,7 +5,7 @@ */ import { LanguageStrings } from "./mod.ts"; -export const PO_EN_US: LanguageStrings = { +export const PO_EN: LanguageStrings = { microphone: "Microphone", chatbox_placeholder: "Type a message", chatbox_label: "send message", diff --git a/client-web/source/locale/ja.ts b/client-web/source/locale/ja.ts index 4925667..09e0375 100644 --- a/client-web/source/locale/ja.ts +++ b/client-web/source/locale/ja.ts @@ -1,5 +1,3 @@ - - /* This file is part of keks-meet (https://codeberg.org/metamuffin/keks-meet) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. @@ -7,7 +5,93 @@ */ import { LanguageStrings } from "./mod.ts"; -// @ts-ignore -export const PO_JA_JA: LanguageStrings = { - +// TODO this is mostly autogenerated. please fix it. +export const PO_JA: LanguageStrings = { + join_message: author => [author, " は会議に参加しました。"], + status_drain_buffer: amount => `バッファの削除... (バッファ: ${amount})`, + enable: thing => `${thing} アクセス。`, + leave_message: author => [author, " は会議を左に。"], + microphone: "マイクロホン", + chatbox_placeholder: "メッセージの種類", + chatbox_label: "送信メッセージ", + summary_empty_message: "(空のメッセージ)", + summery_image: "(写真)", + camera: "カメラ", + file: "ファイル", + leave: "おすすめ", + screen: "スクリーン", + image_alt: "画像(クリックして開きます)", + warn_mem_download: "サービスワーカーが利用できないので、メモリにダウンロードしてください。", + confirm_update: "本当に更新?", + warn_short_secret: "部屋名がとても短いです。 E2EEは安全です!", + warn_secure_context: "このページは「セキュアコンテキスト」ではありません お問い合わせ", + warn_no_webrtc: "WebRTC はサポートしていません。", + warn_no_crypto: "SubtleCrypto 利用不可", + warn_no_sw: "ブラウザはサービスワーカーAPIをサポートしていません。強制自動更新は無効です。", + warn_old_url: "古いURL形式からリダイレクトされました。 サーバは部屋の秘密を今知っている - E2EE は安全です!", + confirm_quit: "現地のリソース共有があります。 本当に終了?", + controls: "コントロール", + license: "ライセンス", + source_code: "ソースコード", + stop_sharing: "共有の停止", + documentation: "ドキュメント", + known_rooms: "既知の客室", + chat: "チャット", + settings: "コンテンツ", + edit: "編集", + finish_edit: "終わりの編集", + add_current_room: "現在の部屋を追加", + add: "追加する", + move_down: "移動する", + move_up: "移動する", + unknown_user: "不明なユーザー", + status_checking: "チェックイン", + status_connected: "コネクテッド", + status_failed: "接続失敗", + status_disconnected: "接続解除", + status_no_conn: "接続しない", + status_await_channel_open: "データチャネルが開くのを待って...", + status_await_channel_close: "データチャネルを閉じるのを待って...", + downloading: "ダウンロード...", + download_again: "ダウンロード", + download: "ダウンロード", + status_buffering: "バッファリング...", + status_closing: "チャンネル閉鎖...", + mute: "ミュート", + video_stream: "ビデオストリーム", + audio_stream: "オーディオストリーム", + local: "ローカル", + disable: "免責事項", + status_await_stream: "待ち時間の流れ", + notification_perm_explain: "通知を送信するkeks-meetの場合、許可を付与する必要があります。", + grant: "助成金", + clear_prefs: "すべての設定をクリアしたいですか? これを使う:", + setting_descs: { + language: "インターフェイス言語", + warn_redirect: "サーバリダイレクトで設定する内部オプション。", + image_view_popup: "新しいタブではなくポップアップでイメージを開く", + webrtc_debug: "WebRTC関連コンテンツの追加情報を表示", + screencast_audio: "画面を共有するときにオーディオを含める。", + microphone_enabled: "起動時に1台のマイクトラックを追加", + screencast_enabled: "スタートアップで1つのスクリーンキャストトラックを追加", + camera_enabled: "起動時に1つのカメラトラックを追加", + rnnoise: "騒音抑制にRNNoiseを使用", + native_noise_suppression: "ノイズ抑制を行うブラウザを提案する", + microphone_gain: "マイクの音量を増幅", + video_fps: "スクリーンキャストとカメラの推奨フレームレート(1 /秒)", + video_resolution: "スクリーンキャストおよびカメラのための好まれる横の決断", + camera_facing_mode: "優先ユーザーフェーシングまたはエンブフェーシングカメラ", + auto_gain_control: "自動的にmic利益を調節して下さい", + echo_cancellation: "キャンセルエコー", + audio_activity_threshold: "オーディオ活動のしきい値", + optional_audio_default_enable: "デフォルトでオーディオトラックを有効にする", + optional_video_default_enable: "デフォルトでビデオトラックを有効にする", + notify_chat: "チャットメッセージを受信するための通知を送信する", + notify_join: "ユーザーが参加したときに通知を送信する", + notify_leave: "ユーザーが退去したときに通知を送信", + enable_onbeforeunload: "ローカルリソースが共有されている間、サイトを離れるときに確認のためのプロンプト", + room_watches: "既知の客室(セミコロンは、name=secretペアの区切りリストとして)", + username: "ユーザ名", + show_log: "拡張ログを表示します。" + }, } diff --git a/client-web/source/locale/mod.ts b/client-web/source/locale/mod.ts index 0f5fc77..7dc2992 100644 --- a/client-web/source/locale/mod.ts +++ b/client-web/source/locale/mod.ts @@ -1,7 +1,7 @@ -import { PO_DE_DE } from "./de.ts"; -import { PO_EN_US } from "./en.ts"; +import { PO_DE } from "./de.ts"; +import { PO_EN } from "./en.ts"; import { PREF_DECLS } from "../preferences/decl.ts"; -import { PO_JA_JA } from "./ja.ts"; +import { PO_JA } from "./ja.ts"; export let PO: LanguageStrings; @@ -12,12 +12,13 @@ export function init_locale(lang: string) { } export const LOCALES: { [key: string]: LanguageStrings } = { - "en": PO_EN_US, - "en-US": PO_EN_US, - "en-GB": PO_EN_US, // close enough - "de": PO_DE_DE, - "de-DE": PO_DE_DE, - "ja-JA": PO_JA_JA, + "en": PO_EN, + "en-US": PO_EN, + "en-GB": PO_EN, // close enough + "de": PO_DE, + "de-DE": PO_DE, + "ja": PO_JA, + "ja-JP": PO_JA, } export interface LanguageStrings { |