aboutsummaryrefslogtreecommitdiff
path: root/client-web
diff options
context:
space:
mode:
Diffstat (limited to 'client-web')
-rw-r--r--client-web/scripts/apply_translations.ts0
-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.ts16
-rw-r--r--client-web/scripts/translate.py37
-rw-r--r--client-web/source/locale/de.ts2
-rw-r--r--client-web/source/locale/en.ts2
-rw-r--r--client-web/source/locale/ja.ts94
-rw-r--r--client-web/source/locale/mod.ts19
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 {