i18n批次: LanguageUtil+en/ja三语资源、阶段总结文档、models大文件与~$临时docx排除入库
This commit is contained in:
parent
34e9fb3578
commit
2e1de4da48
|
|
@ -22,3 +22,5 @@ local.properties
|
|||
|
||||
# 模型文件体积大,不入库;运行时手动放入 app/src/main/assets/
|
||||
*.onnx
|
||||
~$*.docx
|
||||
models/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
package com.k2fsa.sherpa.onnx
|
||||
|
||||
import android.content.Context
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import java.util.Locale
|
||||
|
||||
// ============================================================================
|
||||
// LanguageUtil — 应用界面语言(中/英/日 + 跟随系统)
|
||||
//
|
||||
// 持久化在 SharedPreferences;启动时 apply() 一次;切换走
|
||||
// AppCompatDelegate.setApplicationLocales(appcompat 1.6 自带 API<33 回移),
|
||||
// 由框架自动重建 Activity。业务数据(声纹内部键、纪要 schema 键、jsonl)
|
||||
// 一律不受界面语言影响 —— 语言只影响"显示层"。
|
||||
// ============================================================================
|
||||
object LanguageUtil {
|
||||
const val MODE_SYSTEM = "system"
|
||||
const val MODE_ZH = "zh"
|
||||
const val MODE_EN = "en"
|
||||
const val MODE_JA = "ja"
|
||||
|
||||
private const val PREFS = "lang"
|
||||
private const val KEY = "mode"
|
||||
|
||||
fun mode(ctx: Context): String =
|
||||
ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
||||
.getString(KEY, MODE_SYSTEM) ?: MODE_SYSTEM
|
||||
|
||||
fun apply(ctx: Context) {
|
||||
val locales = when (mode(ctx)) {
|
||||
MODE_ZH -> LocaleListCompat.forLanguageTags("zh")
|
||||
MODE_EN -> LocaleListCompat.forLanguageTags("en")
|
||||
MODE_JA -> LocaleListCompat.forLanguageTags("ja")
|
||||
else -> LocaleListCompat.getEmptyLocaleList() // 跟随系统
|
||||
}
|
||||
// 值相同则为 no-op,不会触发重建
|
||||
if (AppCompatDelegate.getApplicationLocales() != locales) {
|
||||
AppCompatDelegate.setApplicationLocales(locales)
|
||||
}
|
||||
}
|
||||
|
||||
fun set(ctx: Context, m: String) {
|
||||
ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
||||
.edit().putString(KEY, m).apply()
|
||||
// setApplicationLocales 会自动 recreate;system 模式下清空后回退
|
||||
// 到当前显示语言,避免"空 locale 不生效导致不重建"
|
||||
val target = if (m == MODE_SYSTEM) currentFallback() else m
|
||||
val locales = when (target) {
|
||||
MODE_JA -> LocaleListCompat.forLanguageTags("ja")
|
||||
MODE_EN -> LocaleListCompat.forLanguageTags("en")
|
||||
else -> LocaleListCompat.forLanguageTags("zh")
|
||||
}
|
||||
AppCompatDelegate.setApplicationLocales(locales)
|
||||
if (m == MODE_SYSTEM) {
|
||||
// 再切回真正的跟随系统(下一次启动生效)
|
||||
ctx.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
||||
.edit().putString(KEY, MODE_SYSTEM).apply()
|
||||
AppCompatDelegate.setApplicationLocales(
|
||||
LocaleListCompat.forLanguageTags(currentFallback())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun currentFallback(): String =
|
||||
Locale.getDefault().language.takeIf { it == "ja" || it == "en" } ?: "zh"
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<resources>
|
||||
<string name="hint">Tap Start to begin live transcription.\n\nSource code and all models are open resources — see github.com/k2fsa/sherpa-onnx.\nTwo-pass recognition · speaker ID · offline meeting minutes</string>
|
||||
<string name="start">Start</string>
|
||||
<string name="stop">Stop</string>
|
||||
<string name="pause">Pause</string>
|
||||
<string name="resume">Resume</string>
|
||||
<string name="dlg_ok">OK</string>
|
||||
<string name="dlg_cancel">Cancel</string>
|
||||
<string name="generate_minutes">Minutes</string>
|
||||
<string name="cancel_minutes">Cancel</string>
|
||||
<string name="copy_minutes">Copy</string>
|
||||
<string name="history_button">History</string>
|
||||
<string name="history_back">Back to live</string>
|
||||
<string name="lang_button">Language</string>
|
||||
<string name="lang_title">UI language</string>
|
||||
<string name="lang_system">Follow system</string>
|
||||
<string name="minutes_hint">Tap “Minutes” to summarize this meeting offline. The latest minutes appear here.</string>
|
||||
|
||||
<string name="loading_pass1">Loading 1st-pass model (nemotron-3.5)…</string>
|
||||
<string name="loading_pass2">Loading 2nd-pass model (funasr-nano)…</string>
|
||||
<string name="loading_speaker">Loading speaker model…</string>
|
||||
<string name="load_done">Models ready.</string>
|
||||
<string name="tap_start">Tap Start to begin</string>
|
||||
<string name="speaker_on">Speaker ID enabled</string>
|
||||
<string name="speaker_off">⚠ Speaker ID off: model %1$s missing (adb push it to %2$s)</string>
|
||||
<string name="load_failed">Model loading failed: %1$s\n\nAll models live under %2$s — push them with adb</string>
|
||||
|
||||
<string name="label_identified">Identified %1$d</string>
|
||||
<string name="label_unknown">Unknown</string>
|
||||
|
||||
<string name="naming_title_new">Name speaker “%1$s”</string>
|
||||
<string name="naming_title_rename">Rename “%1$s” to…</string>
|
||||
<string name="naming_hint">Real name for “%1$s”, e.g. Alice</string>
|
||||
<string name="naming_bad_name">Name can’t be “S+digits” or a reserved display name</string>
|
||||
<string name="naming_done">Renamed to “%1$s”; adjacent lines of the same speaker merged</string>
|
||||
<string name="naming_wait_owner">Speaker not settled yet — finish a full sentence first</string>
|
||||
|
||||
<string name="hist_title">Past meetings</string>
|
||||
<string name="hist_busy_recording">Recording — end this session before browsing history</string>
|
||||
<string name="hist_none">No past meetings to show</string>
|
||||
<string name="hist_item">%1$s · %2$d lines · %3$s%4$s</string>
|
||||
<string name="hist_has_md"> · has minutes</string>
|
||||
<string name="history_reading">History: %1$s (read-only)</string>
|
||||
|
||||
<string name="sum_title">Choose a meeting to summarize</string>
|
||||
<string name="sum_current">[Current meeting] %1$d lines · %2$s</string>
|
||||
<string name="sum_has_md"> · has minutes (continue)</string>
|
||||
<string name="sum_none">Nothing to summarize yet — record a meeting first</string>
|
||||
<string name="sum_empty_this">This meeting has no settled lines</string>
|
||||
<string name="sum_generating">Minutes in progress — tap again to cancel</string>
|
||||
<string name="sum_no_abi">This device ABI lacks the summarizer runtime (arm64-v8a only)</string>
|
||||
<string name="sum_model_missing">Summarizer model missing. Run:\n%1$s</string>
|
||||
<string name="sum_loading">Loading summarizer model (%1$s)…</string>
|
||||
<string name="sum_stage_notes">notes</string>
|
||||
<string name="sum_stage_draft">drafting</string>
|
||||
<string name="sum_progress">Running %1$s: %2$d/%3$d</string>
|
||||
<string name="sum_ready_resume">Model ready, resuming from checkpoint (%1$d/%2$d lines done)…</string>
|
||||
<string name="sum_ready">Model ready, %1$d lines — building notes…</string>
|
||||
<string name="sum_saved">Minutes saved (%1$s, %2$d chunks%3$s): %4$s</string>
|
||||
<string name="sum_failed_chunks">, %1$d chunks failed</string>
|
||||
<string name="sum_cancelled">Cancelled (previous minutes kept)</string>
|
||||
<string name="sum_auto_cancel">Cancelled automatically: %1$s (previous minutes kept)</string>
|
||||
<string name="sum_fail_toast">Failed: %1$s</string>
|
||||
<string name="sum_cancel_toast">Cancelled</string>
|
||||
<string name="sum_empty_toast">Cancelled automatically</string>
|
||||
<string name="sum_recording_note">Summarizing — transcription continues uninterrupted</string>
|
||||
<string name="sum_copied">Minutes copied to clipboard</string>
|
||||
|
||||
<string name="minutes_last">Last minutes: %1$s (will be overwritten by a new run)</string>
|
||||
<string name="minutes_unfinished">Meeting “%1$s” has no minutes yet — tap “Minutes” to finish it (incremental)</string>
|
||||
|
||||
<string name="lang_busy_session">Session active — end recording before switching language</string>
|
||||
<string name="copied">Copied to clipboard</string>
|
||||
<string name="sum_canceling">Cancelling…</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<resources>
|
||||
<string name="hint">「開始」を押すとリアルタイム文字起こしを開始します。\n\nソースコードとモデルはすべて公開されています: github.com/k2fsa/sherpa-onnx\n2パス認識 · 話者識別 · オフライン議事録</string>
|
||||
<string name="start">開始</string>
|
||||
<string name="stop">停止</string>
|
||||
<string name="pause">一時停止</string>
|
||||
<string name="resume">続行</string>
|
||||
<string name="dlg_ok">OK</string>
|
||||
<string name="dlg_cancel">キャンセル</string>
|
||||
<string name="generate_minutes">議事録生成</string>
|
||||
<string name="cancel_minutes">生成を中止</string>
|
||||
<string name="copy_minutes">議事録コピー</string>
|
||||
<string name="history_button">過去の会議</string>
|
||||
<string name="history_back">現在に戻る</string>
|
||||
<string name="lang_button">言語</string>
|
||||
<string name="lang_title">表示言語</string>
|
||||
<string name="lang_system">システムに追従</string>
|
||||
<string name="minutes_hint">「議事録生成」を押すとこの会議をオフラインで要約します。結果と前回の議事録はここに表示されます</string>
|
||||
|
||||
<string name="loading_pass1">第1パスモデル(nemotron-3.5)を読み込み中…</string>
|
||||
<string name="loading_pass2">第2パスモデル(funasr-nano)を読み込み中…</string>
|
||||
<string name="loading_speaker">声紋モデルを読み込み中…</string>
|
||||
<string name="load_done">モデルの準備が完了しました。</string>
|
||||
<string name="tap_start">「開始」を押して認識してください</string>
|
||||
<string name="speaker_on">話者識別は有効です</string>
|
||||
<string name="speaker_off">⚠ 話者識別は無効:声紋モデル %1$s がありません(%2$s へ adb push してください)</string>
|
||||
<string name="load_failed">モデル読み込みに失敗:%1$s\n\nモデルはすべて %2$s に配置 — adb push で配信してください</string>
|
||||
|
||||
<string name="label_identified">識別済み %1$d</string>
|
||||
<string name="label_unknown">未識別</string>
|
||||
|
||||
<string name="naming_title_new">話者「%1$s」に名前を付ける</string>
|
||||
<string name="naming_title_rename">「%1$s」を次の名前に変更…</string>
|
||||
<string name="naming_hint">「%1$s」の本名(例:田中)</string>
|
||||
<string name="naming_bad_name">名前は「S+数字」やシステム予約名は使えません</string>
|
||||
<string name="naming_done">「%1$s」に改名し、隣接する同一話者の行を結合しました</string>
|
||||
<string name="naming_wait_owner">この発話の話者はまだ確定していません。一文話し終えてから命名してください</string>
|
||||
|
||||
<string name="hist_title">過去の会議</string>
|
||||
<string name="hist_busy_recording">録音中です。今回の会議を終了してから履歴を閲覧できます</string>
|
||||
<string name="hist_none">閲覧できる過去の会議がありません</string>
|
||||
<string name="hist_item">%1$s · %2$d 発 · %3$s%4$s</string>
|
||||
<string name="hist_has_md"> · 議事録あり</string>
|
||||
<string name="history_reading">履歴:%1$s(読み取り専用)</string>
|
||||
|
||||
<string name="sum_title">要約する会議を選択</string>
|
||||
<string name="sum_current">【現在の会議】%1$d 発 · %2$s</string>
|
||||
<string name="sum_has_md"> · 議事録あり(続きから)</string>
|
||||
<string name="sum_none">要約できる会議がありません。先に録音してください</string>
|
||||
<string name="sum_empty_this">この会議に確定した発話がありません</string>
|
||||
<string name="sum_generating">議事録を生成中です。もう一度押すと中止できます</string>
|
||||
<string name="sum_no_abi">この端末のABIには要約ランタイムが含まれていません(arm64-v8aのみ)</string>
|
||||
<string name="sum_model_missing">要約モデルがありません。実行してください:\n%1$s</string>
|
||||
<string name="sum_loading">要約モデル(%1$s)を読み込み中…</string>
|
||||
<string name="sum_stage_notes">メモ更新</string>
|
||||
<string name="sum_stage_draft">清書</string>
|
||||
<string name="sum_progress">%1$s実行中: %2$d/%3$d</string>
|
||||
<string name="sum_ready_resume">モデル準備完了、前回の中断点から続行(%1$d/%2$d 消化済み)…</string>
|
||||
<string name="sum_ready">モデル準備完了、全 %1$d 発、メモ構築を開始…</string>
|
||||
<string name="sum_saved">議事録を保存しました(%1$s、%2$d ブロック%3$s):%4$s</string>
|
||||
<string name="sum_failed_chunks">、%1$d ブロック解析失敗</string>
|
||||
<string name="sum_cancelled">中止しました(前回の議事録は保持)</string>
|
||||
<string name="sum_auto_cancel">自動キャンセル:%1$s(前回の議事録は保持)</string>
|
||||
<string name="sum_fail_toast">生成失敗:%1$s</string>
|
||||
<string name="sum_cancel_toast">中止しました</string>
|
||||
<string name="sum_empty_toast">自動キャンセルしました</string>
|
||||
<string name="sum_recording_note">議事録生成中でも文字起こしは停止しません</string>
|
||||
<string name="sum_copied">議事録をクリップボードにコピーしました</string>
|
||||
|
||||
<string name="minutes_last">前回の議事録:%1$s(新規生成すると上書きされます)</string>
|
||||
<string name="minutes_unfinished">前回の会議「%1$s」は議事録未生成です。「議事録生成」で続きを生成できます(増分、新規発話のみ処理)</string>
|
||||
|
||||
<string name="lang_busy_session">セッション終了後に言語を切り替えられます</string>
|
||||
<string name="copied">クリップボードにコピーしました</string>
|
||||
<string name="sum_canceling">中止中…</string>
|
||||
</resources>
|
||||
Binary file not shown.
Loading…
Reference in New Issue