Add OpenCC chinese converter

This commit is contained in:
世界 2020-12-18 01:32:45 +08:00
parent 6104389aab
commit a475301533
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
36 changed files with 60486 additions and 30 deletions

View File

@ -79,10 +79,10 @@ dependencies {
implementation "com.squareup.okhttp3:okhttp:$okHttpVersion"
implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okHttpVersion"
implementation 'dnsjava:dnsjava:3.3.1'
implementation 'org.dizitart:nitrite:3.4.2'
implementation 'org.dizitart:nitrite:3.4.3'
implementation 'cn.hutool:hutool-core:5.5.2'
implementation 'cn.hutool:hutool-crypto:5.5.2'
implementation 'cn.hutool:hutool-core:5.5.4'
implementation 'cn.hutool:hutool-crypto:5.5.4'
implementation 'com.jakewharton:process-phoenix:2.0.0'
@ -98,6 +98,10 @@ dependencies {
releaseImplementation "com.google.firebase:firebase-crashlytics:$crashlyticsVersion"
releaseImplementation "com.google.android.play:core:$playCoreVersion"
testImplementation 'junit:junit:4.13.1'
testImplementation 'androidx.test:core:1.3.0'
testImplementation "org.robolectric:robolectric:4.4"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1'
}
@ -184,6 +188,10 @@ android {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
testOptions {
unitTests.includeAndroidResources = true
}
signingConfigs {
def keystorePwd = null
def alias = null

View File

@ -0,0 +1,63 @@
僞 偽
兌 兑
叄 叁
只 只 衹
啓 啓 啟
喫 吃
囪 囱
妝 妝 粧
媼 媪
嬀 媯
悅 悦
慍 愠
戶 户
挩 捝
搵 揾
擡 抬
敓 敚
敘 敍 敘
柺 枴
梲 棁
棱 稜 棱
榲 榅
檯 枱
氳 氲
涗 涚
溫 温
溼 濕
潙 溈
潨 潀
熅 煴
爲 為
癡 痴
皁 皂
祕 秘
稅 税
竈 灶
糉 粽 糉 糭
縕 緼
纔 才
脣 唇
脫 脱
膃 腽
臥 卧
臺 台
菸 煙
蒕 蒀
蔥 葱
蔿 蒍
蘊 藴
蛻 蜕
衆 眾
衛 衞
覈 核
說 説
踊 踴
轀 輼
醞 醖
鉢 缽
鉤 鈎
銳 鋭
鍼 針
閱 閲
鰮 鰛

View File

@ -0,0 +1,64 @@
偽 僞
兑 兌
卧 臥
叁 叄
台 臺 台
吃 喫 吃
唇 脣
啟 啓
囱 囪
媪 媼
媯 嬀
悦 悅
愠 慍
户 戶
才 才 纔
抬 擡
捝 挩
揾 搵
敍 敘
敚 敓
枱 檯
枴 柺
核 核 覈
棁 梲
榅 榲
氲 氳
涚 涗
温 溫
溈 潙
潀 潨
濕 溼
灶 竈
為 爲
煙 煙 菸
煴 熅
痴 癡
皂 皁
眾 衆
秘 祕
税 稅
稜 棱
粧 妝
粽 糉
糭 糉
緼 縕
缽 鉢
脱 脫
腽 膃
葱 蔥
蒀 蒕
蒍 蔿
藴 蘊
蜕 蛻
衞 衛
衹 只
説 說
踴 踊
輼 轀
醖 醞
針 鍼
鈎 鉤
鋭 銳
閲 閱
鰛 鰮

View File

@ -0,0 +1,156 @@
一口吃個 一口喫個
一口吃成 一口喫成
一家三口 一家三口
一家五口 一家五口
一家六口 一家六口
一家四口 一家四口
七星巖 七星巖
世胄 世胄
介胄 介冑
傅巖 傅巖
免胄 免冑
冠胄 冠冑
千巖競秀 千巖競秀
千巖萬壑 千巖萬壑
千巖萬谷 千巖萬谷
口吃 口吃
台山 台山
台州 台州
台州地區 台州地區
台州市 台州市
吃口 喫口 吃口
吃口令 吃口令
吃口飯 喫口飯
吃吃 喫喫 吃吃
吃子 喫子 吃子
名胄 名胄
國胄 國胄
圍巖 圍巖
地胄 地胄
壓胄子 壓冑子
士胄 士胄
大巖桐 大巖桐
天台女 天台女
天台宗 天台宗
天台山 天台山
天台縣 天台縣
天潢貴胄 天潢貴胄
奇巖 奇巖
寶胄 寶胄
小巖洞 小巖洞
岫巖縣 岫巖縣
峯巖 峯巖
嵌巖 嵌巖
巉巖 巉巖
巖壁 巖壁
巖居 巖居
巖居穴處 巖居穴處
巖居谷飲 巖居谷飲
巖岸 巖岸
巖巉 巖巉
巖巖 巖巖
巖徼 巖徼
巖手縣 巖手縣
巖村 巖村
巖洞 巖洞
巖流圈 巖流圈
巖牆 巖牆
巖牆之下 巖牆之下
巖畫 巖畫
巖穴 巖穴
巖穴之士 巖穴之士
巖薔薇 巖薔薇
巖邑 巖邑
巖郎 巖郎
巖阻 巖阻
巖陛 巖陛
帝胄 帝胄
幽巖 幽巖
幽棲巖谷 幽棲巖谷
張口 張口
懸巖 懸巖
懸巖峭壁 懸巖峭壁
懸胄 懸冑
攀巖 攀巖
支胄 支胄
教胄 教胄
景胄 景胄
望胄 望胄
末胄 末胄
村胄 村胄
枕巖漱流 枕巖漱流
枝胄 枝胄
氏胄 氏胄
洪胄 洪胄
浙江天台縣 浙江天台縣
清胄 清胄
灰巖殘丘 灰巖殘丘
玄胄 玄胄
甲胄 甲冑
甲胄魚類 甲冑魚類
皇胄 皇胄
石灰巖洞 石灰巖洞
神胄 神胄
簪纓世胄 簪纓世胄
系胄 系胄
紅巖 紅巖
絕巖 絕巖
緒胄 緒胄
纂胄 纂胄
胃口 胃口
胄嗣 胄嗣
胄子 胄子
胄序 胄序
胄族 胄族
胄甲 冑甲
胄監 胄監
胄科 冑科
胄緒 胄緒
胄胤 胄胤
胄裔 胄裔
胄裔繁衍 胄裔繁衍
胄閥 胄閥
胡雪巖 胡雪巖
胤胄 胤胄
苗胄 苗胄
英胄 英胄
華胄 華胄
血胄 血胄
裔胄 裔胄
訓胄 訓胄
試胄 試胄
豪門貴胄 豪門貴胄
貝胄 貝冑
貴胄 貴胄
賢胄 賢胄
蹇吃 蹇吃
躬擐甲胄 躬擐甲冑
遐胄 遐胄
遙胄 遙胄
遙遙華胄 遙遙華胄
遠胄 遠胄
遺胄 遺胄
鄧艾吃 鄧艾吃
重巖疊嶂 重巖疊嶂
金胄 金胄
鎧胄 鎧冑
鑿巖 鑿巖
門胄 門胄
開口 開口
雲巖區 雲巖區
非層巖 非層巖
韓侂胄 韓侂冑
飮胄 飮冑
骨巖巖 骨巖巖
高胄 高胄
魚胄 魚冑
鮮胄 鮮胄
鴻胄 鴻胄
黃巖區 黃巖區
黃巖島 黃巖島
黃炎貴胄 黃炎貴胄
齒胄 齒胄
龍巖 龍巖
龍巖市 龍巖市
龍巖村 龍巖村
龍胄 龍胄

View File

@ -0,0 +1,6 @@
両 兩 輛
弁 辨 辯 瓣 辦 弁
御 御 禦
欠 缺 欠
糸 絲 糸
芸 藝 芸

View File

@ -0,0 +1,176 @@
一獲千金 一攫千金
丁寧 叮嚀
丁重 鄭重
三差路 三叉路
世論 輿論
亜鈴 啞鈴
交差 交叉
供宴 饗宴
俊馬 駿馬
保塁 堡壘
個条書 箇条書
偏平 扁平
停泊 碇泊
優俊 優駿
先兵 尖兵
先鋭 尖鋭
共役 共軛
冗舌 饒舌
凶器 兇器
削岩 鑿岩
包丁 庖丁
包帯 繃帯
区画 區劃
厳然 儼然
友宜 友誼
反乱 叛乱
収集 蒐集
叙情 抒情
台頭 擡頭
合弁 合辦
喜遊曲 嬉遊曲
嘆願 歎願
回転 廻転
回遊 回游
奉持 捧持
委縮 萎縮
展転 輾轉
希少 稀少
幻惑 眩惑
広範 廣汎
広野 曠野
廃虚 廢墟
建坪率 建蔽率
弁当 辨當
弁膜 瓣膜
弁護 辯護
弁髪 辮髮
弦歌 絃歌
恩義 恩誼
意向 意嚮
慰謝料 慰藉料
憶断 臆断
憶病 臆病
戦没 戰歿
扇情 煽情
手帳 手帖
技量 伎倆
抜粋 抜萃
披歴 披瀝
抵触 牴触
抽選 抽籤
拘引 勾引
拠出 醵出
拠金 醵金
掘削 掘鑿
控除 扣除
援護 掩護
放棄 抛棄
散水 撒水
敬謙 敬虔
敷延 敷衍
断固 断乎
族生 簇生
昇叙 陞敘
暖房 煖房
暗唱 暗誦
暗夜 闇夜
暴露 曝露
枯渇 涸渇
格好 恰好
格幅 恰幅
棄損 毀損
模索 摸索
橋頭保 橋頭堡
欠缺 欠缺
死体 屍體
殿部 臀部
母指 拇指
気迫 気魄
決別 訣別
決壊 決潰
沈殿 沈澱
油送船 油槽船
波乱 波瀾
注釈 註釋
洗浄 洗滌 洗浄
活発 活潑
浸透 滲透
浸食 浸蝕
消却 銷卻
混然 渾然
湾曲 彎曲
溶接 熔接
漁労 漁撈
漂然 飄然
激高 激昂
火炎 火焰
焦燥 焦躁
班点 斑点
留飲 溜飲
略奪 掠奪
疎通 疏通
発酵 醱酵
白亜 白堊
相克 相剋
知恵 智慧
破棄 破毀
確固 確乎
禁固 禁錮
符丁 符牒
粉装 扮装
紫班 紫斑
終息 終熄
総合 綜合
編集 編輯
義援 義捐
耕運機 耕耘機
肝心 肝腎
肩甲骨 肩胛骨
背徳 悖德
脈拍 脈搏
膨張 膨脹
芳純 芳醇
英知 叡智
蒸留 蒸溜
薫蒸 燻蒸
薫製 燻製
衣装 衣裳
衰退 衰退 衰頽
裕然 悠然
補佐 輔佐
訓戒 訓誡
試練 試煉
詭弁 詭辯
講和 媾和
象眼 象嵌
貫録 貫禄
買弁 買辦
賛辞 讚辭
踏襲 蹈襲
車両 車輛
転倒 顛倒
輪郭 輪廓
退色 褪色
途絶 杜絶
連係 連繫
連合 聯合
選考 銓衡
酢酸 醋酸
野卑 野鄙
鉱石 礦石
間欠 間歇
関数 函數
防御 防禦
険阻 嶮岨
障壁 牆壁
障害 障礙
隠滅 湮滅
集落 聚落
雇用 雇傭
風諭 諷喩
飛語 蜚語
香典 香奠
骨格 骨骼
高進 亢進
鳥観 鳥瞰

View File

@ -0,0 +1,367 @@
乘 乗
亂 乱
亙 亘
亞 亜
佛 仏
來 来
假 仮
傳 伝
僞 偽
價 価
儉 倹
兒 児
內 内
兩 両
剎 刹
剩 剰
劍 剣
劑 剤
勞 労
勳 勲
勵 励
勸 勧
勻 匀
區 区
卷 巻
卻 却
參 参
吳 呉
咒 呪
啞 唖
單 単
噓 嘘
嚙 噛
嚴 厳
囑 嘱
圈 圏
國 国
圍 囲
圓 円
圖 図
團 団
增 増
墮 堕
壓 圧
壘 塁
壞 壊
壤 壌
壯 壮
壹 壱
壽 寿
奧 奥
奬 奨
妝 粧
孃 嬢
學 学
寢 寝
實 実
寫 写
寬 寛
寶 宝
將 将
專 専
對 対
屆 届
屬 属
峯 峰
峽 峡
嶽 岳
巖 巌
巢 巣
帶 帯
廁 厠
廢 廃
廣 広
廳 庁
彈 弾
彌 弥
彎 弯
彥 彦
徑 径
從 従
徵 徴
德 徳
恆 恒
悅 悦
惠 恵
惡 悪
惱 悩
慘 惨
應 応
懷 懐
戀 恋
戰 戦
戲 戯
戶 戸
戾 戻
拂 払
拔 抜
拜 拝
挾 挟
插 挿
揭 掲
搔 掻
搖 揺
搜 捜
摑 掴
擇 択
擊 撃
擔 担
據 拠
擴 拡
攝 摂
攪 撹
收 収
效 効
敕 勅
敘 叙
數 数
斷 断
晉 晋
晚 晩
晝 昼
暨 曁
曆 暦
曉 暁
曾 曽
會 会
枡 桝
查 査
條 条
棧 桟
棱 稜 棱
榆 楡
榮 栄
樂 楽
樓 楼
樞 枢
樣 様
橫 横
檢 検
櫻 桜
權 権
歐 欧
歡 歓
步 歩
歲 歳
歷 歴
歸 帰
殘 残
殼 殻
毆 殴
每 毎
氣 気
污 汚
沒 没
涉 渉
淚 涙
淨 浄
淺 浅
渴 渇
溌 潑
溪 渓
溫 温
溼 湿
滯 滞
滿 満
潛 潜
澀 渋
澤 沢
濟 済
濤 涛
濱 浜
濾 沪
瀧 滝
瀨 瀬
灣 湾
焔 焰
燈 灯
燒 焼
營 営
爐 炉
爭 争
爲 為
牀 床
犧 犠
狀 状
狹 狭
獨 独
獵 猟
獸 獣
獻 献
瓣 弁
產 産
畫 画
當 当
疊 畳
疎 疏
痹 痺
瘦 痩
癡 痴
發 発
皋 皐
盜 盗
盡 尽
碎 砕
祕 秘
祿 禄
禦 御
禪 禅
禮 礼
禱 祷
稅 税
稱 称
稻 稲
穎 頴
穗 穂
穩 穏
穰 穣
竃 竈
竊 窃
粹 粋
糉 粽
絕 絶
絲 糸
經 経
綠 緑
緖 緒
緣 縁
縣 県
縱 縦
總 総
繋 繫
繡 繍
繩 縄
繪 絵
繼 継
續 続
纔 才
纖 繊
缺 欠
罐 缶
羣 群
聯 連
聰 聡
聲 声
聽 聴
肅 粛
脣 唇
脫 脱
腦 脳
腳 脚
膽 胆
臟 臓
臺 台
與 与
舉 挙
舊 旧
舍 舎
荔 茘
莊 荘
莖 茎
菸 煙
萊 莱
萬 万
蔣 蒋
蔥 葱
薰 薫
藏 蔵
藝 芸
藥 薬
蘆 芦
處 処
虛 虚
號 号
螢 蛍
蟲 虫
蠟 蝋
蠶 蚕
蠻 蛮
裝 装
覺 覚
覽 覧
觀 観
觸 触
說 説
謠 謡
證 証
譯 訳
譽 誉
讀 読
變 変
讓 譲
豐 豊
豫 予
貓 猫
貳 弐
賣 売
賴 頼
贊 賛
贗 贋
踐 践
輕 軽
輛 輌
轉 転
辨 弁
辭 辞
辯 弁
遞 逓
遥 遙
遲 遅
邊 辺
鄉 郷
酢 醋
醉 酔
醗 醱
醫 医
醬 醤
釀 醸
釋 釈
鋪 舗
錄 録
錢 銭
鍊 錬
鐵 鉄
鑄 鋳
鑛 鉱
閱 閲
關 関
陷 陥
隨 随
險 険
隱 隠
雙 双
雜 雑
雞 鶏
霸 覇
靈 霊
靜 静
顏 顔
顯 顕
餘 余
騷 騒
驅 駆
驗 験
驛 駅
髓 髄
體 体
髮 髪
鬥 闘
鱉 鼈
鷗 鴎
鹼 鹸
鹽 塩
麥 麦
麪 麺
麴 麹
黃 黄
黑 黒
默 黙
點 点
黨 党
齊 斉
齋 斎
齒 歯
齡 齢
龍 竜
龜 亀

View File

@ -0,0 +1,366 @@
万 万 萬
与 與
両 兩
乗 乘
乱 亂
亀 龜
予 予 豫
争 爭
亘 亙
亜 亞
仏 佛
仮 假
会 會
伝 傳
体 體
余 余 餘
価 價
倹 儉
偽 僞
児 兒
党 黨
内 內
円 圓
写 寫
処 處
刹 剎
剣 劍
剤 劑
剰 剩
励 勵
労 勞
効 效
勅 敕
勧 勸
勲 勳
匀 勻
区 區
医 醫
単 單
却 卻
厠 廁
厳 嚴
参 參
双 雙
収 收
叙 敘
台 台 臺
号 號
呉 吳
呪 咒
唇 脣
唖 啞
営 營
嘘 噓
嘱 囑
噛 嚙
団 團
囲 圍
図 圖
国 國
圏 圈
圧 壓
堕 墮
塁 壘
塩 鹽
増 增
壊 壞
壌 壤
壮 壯
声 聲
壱 壹
売 賣
変 變
奥 奧
奨 奬
嬢 孃
学 學
宝 寶
実 實
寛 寬
寝 寢
対 對
寿 壽
専 專
将 將
尽 盡
届 屆
属 屬
岳 嶽
峡 峽
峰 峯
巌 巖
巣 巢
巻 卷
帯 帶
帰 歸
庁 廳
広 廣
床 牀
廃 廢
弁 瓣 辨 辯
弐 貳
弥 彌
弯 彎
弾 彈
当 當
彦 彥
径 徑
従 從
御 禦
徳 德
徴 徵
応 應
恋 戀
恒 恆
恵 惠
悦 悅
悩 惱
悪 惡
惨 慘
懐 懷
戦 戰
戯 戲
戸 戶
戻 戾
才 才 纔
払 拂
抜 拔
択 擇
担 擔
拝 拜
拠 據
拡 擴
挙 舉
挟 挾
挿 插
捜 搜
掲 揭
掴 摑
掻 搔
揺 搖
摂 攝
撃 擊
撹 攪
数 數
斉 齊
斎 齋
断 斷
旧 舊
昼 晝
晋 晉
晩 晚
暁 曉
暦 曆
曁 暨
曽 曾
条 條
来 來
枢 樞
査 查
栄 榮
桜 櫻
桝 枡
桟 棧
棱 棱
検 檢
楡 榆
楼 樓
楽 樂
様 樣
権 權
横 橫
欠 欠 缺
欧 歐
歓 歡
歩 步
歯 齒
歳 歲
歴 歷
残 殘
殴 毆
殻 殼
毎 每
気 氣
汚 污
没 沒
沢 澤
沪 濾
浄 淨
浅 淺
浜 濱
涙 淚
涛 濤
渇 渴
済 濟
渉 涉
渋 澀
渓 溪
温 溫
湾 灣
湿 溼
満 滿
滝 瀧
滞 滯
潑 溌
潜 潛
瀬 瀨
灯 燈
炉 爐
点 點
為 爲
焰 焔
焼 燒
煙 菸
犠 犧
状 狀
独 獨
狭 狹
猟 獵
猫 貓
献 獻
獣 獸
産 產
画 畫
畳 疊
疏 疎
痩 瘦
痴 癡
痺 痹
発 發
皐 皋
盗 盜
県 縣
砕 碎
礼 禮
祷 禱
禄 祿
禅 禪
秘 祕
称 稱
税 稅
稜 棱
稲 稻
穂 穗
穏 穩
穣 穰
窃 竊
竈 竃
竜 龍
粋 粹
粛 肅
粧 妝
粽 糉
糸 糸 絲
経 經
絵 繪
絶 絕
継 繼
続 續
総 總
緑 綠
緒 緖
縁 緣
縄 繩
縦 縱
繊 纖
繍 繡
繫 繋
缶 缶 罐
群 羣
聡 聰
聴 聽
胆 膽
脚 腳
脱 脫
脳 腦
臓 臟
舎 舍
舗 鋪
芦 蘆
芸 藝
茎 莖
茘 荔
荘 莊
莱 萊
葱 蔥
蒋 蔣
蔵 藏
薫 薰
薬 藥
虚 虛
虫 蟲
蚕 蠶
蛍 螢
蛮 蠻
蝋 蠟
装 裝
覇 霸
覚 覺
覧 覽
観 觀
触 觸
訳 譯
証 證
誉 譽
説 說
読 讀
謡 謠
譲 讓
豊 豐
賛 贊
贋 贗
践 踐
転 轉
軽 輕
輌 輛
辞 辭
辺 邊
逓 遞
連 連 聯
遅 遲
遙 遥
郷 鄉
酔 醉
醋 酢
醤 醬
醱 醗
醸 釀
釈 釋
鉄 鐵
鉱 鑛
銭 錢
鋳 鑄
錬 鍊
録 錄
関 關
閲 閱
闘 鬥
陥 陷
険 險
随 隨
隠 隱
雑 雜
霊 靈
静 靜
頴 穎
頼 賴
顔 顏
顕 顯
駅 驛
駆 驅
騒 騷
験 驗
髄 髓
髪 髮
鴎 鷗
鶏 雞
鹸 鹼
麦 麥
麹 麴
麺 麪
黄 黃
黒 黑
黙 默
鼈 鱉
齢 齡

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,276 @@
一目瞭然 一目了然
上鍊 上链
不瞭解 不了解
么麼 幺麽
么麽 幺麽
乾乾淨淨 干干净净
乾乾脆脆 干干脆脆
乾元 乾元
乾卦 乾卦
乾嘉 乾嘉
乾圖 乾图
乾坤 乾坤
乾坤一擲 乾坤一掷
乾坤再造 乾坤再造
乾坤大挪移 乾坤大挪移
乾宅 乾宅
乾斷 乾断
乾旦 乾旦
乾曜 乾曜
乾清宮 乾清宫
乾盛世 乾盛世
乾紅 乾红
乾綱 乾纲
乾縣 乾县
乾象 乾象
乾造 乾造
乾道 乾道
乾陵 乾陵
乾隆 乾隆
乾隆年間 乾隆年间
乾隆皇帝 乾隆皇帝
以免藉口 以免借口
以功覆過 以功复过
侔德覆載 侔德复载
傢俱 家具
傷亡枕藉 伤亡枕藉
八濛山 八濛山
凌藉 凌借
出醜狼藉 出丑狼藉
函覆 函复
千鍾粟 千锺粟
反反覆覆 反反复复
反覆 反复
反覆思維 反复思维
反覆思量 反复思量
反覆性 反复性
名覆金甌 名复金瓯
哪吒 哪吒
回覆 回复
壺裏乾坤 壶里乾坤
大目乾連冥間救母變文 大目乾连冥间救母变文
宫商角徵羽 宫商角徵羽
射覆 射复
尼乾陀 尼乾陀
幺麼 幺麽
幺麼小丑 幺麽小丑
幺麼小醜 幺麽小丑
康乾 康乾
張法乾 张法乾
彷彿 仿佛
彷徨 彷徨
徵弦 徵弦
徵絃 徵弦
徵羽摩柯 徵羽摩柯
徵聲 徵声
徵調 徵调
徵音 徵音
情有獨鍾 情有独钟 情有独锺
憑藉 凭借
憑藉着 凭借着
手鍊 手链
扭轉乾坤 扭转乾坤
找藉口 找借口
拉鍊 拉链
拉鍊工程 拉链工程
拜覆 拜复
據瞭解 据了解
文錦覆阱 文锦复阱
於世成 於世成
於乎 於乎
於仲完 於仲完
於倫 於伦
於其一 於其一
於則 於则
於勇明 於勇明
於呼哀哉 於呼哀哉
於單 於单
於坦 於坦
於崇文 於崇文
於忠祥 於忠祥
於惟一 於惟一
於戲 於戏
於敖 於敖
於梨華 於梨华
於清言 於清言
於琳 於琳
於穆 於穆
於竹屋 於竹屋
於菟 於菟
於邑 於邑
於陵子 於陵子
於潛 於潜
旋乾轉坤 旋乾转坤
旋轉乾坤 旋转乾坤
旋轉乾坤之力 旋转乾坤之力
明瞭 明了
明覆 明复
書中自有千鍾粟 书中自有千锺粟
有序 有序
朝乾夕惕 朝乾夕惕
木吒 木吒
李乾德 李乾德
李澤鉅 李泽钜
李鍊福 李链福
李鍾郁 李锺郁
樊於期 樊於期
沈沒 沉没
沈沒成本 沉没成本
沈積 沉积
沈船 沉船
沈默 沉默
流徵 流徵
浪蕩乾坤 浪荡乾坤
滑藉 滑借
無序 无序
牴牾 抵牾
牴觸 抵触
狐藉虎威 狐借虎威
珍珠項鍊 珍珠项链
甚鉅 甚钜
申覆 申复
畢昇 毕昇
發覆 发复
盼既示覆 盼既示复
瞭如 了如
瞭如指掌 了如指掌
瞭望 瞭望
瞭然 了然
瞭然於心 了然于心
瞭若指掌 了若指掌
瞭解 了解
瞭解到 了解到
示覆 示复
神祇 神祇
稟覆 禀复
答覆 答复
篤麼 笃麽
簡單明瞭 简单明了
籌畫 筹划
素藉 素借
老態龍鍾 老态龙钟 老态龙锺
肘手鍊足 肘手链足
茵藉 茵借
萬鍾 万锺
蒜薹 蒜薹
蕓薹 芸薹
蕩覆 荡复
蕭乾 萧乾
藉代 借代
藉以 借以
藉助 借助
藉助於 借助于
藉卉 借卉
藉口 借口
藉喻 借喻
藉寇兵 借寇兵
藉寇兵齎盜糧 借寇兵赍盗粮
藉手 借手
藉據 借据
藉故 借故
藉故推辭 借故推辞
藉方 借方
藉條 借条
藉槁 借槁
藉機 借机
藉此 借此
藉此機會 借此机会
藉甚 借甚
藉由 借由
藉着 借着
藉端 借端
藉端生事 借端生事
藉箸代籌 借箸代筹
藉草枕塊 借草枕块
藉藉 藉藉
藉藉无名 藉藉无名
藉詞 借词
藉讀 借读
藉資 借资
衹得 只得
衹見樹木 只见树木
衹見樹木不見森林 只见树木不见森林
袖裏乾坤 袖里乾坤
覆上 复上
覆住 复住
覆信 复信
覆冒 复冒
覆呈 复呈
覆命 复命
覆墓 复墓
覆宗 复宗
覆帳 复帐
覆幬 复帱
覆成 复成
覆按 复按
覆文 复文
覆杯 复杯
覆校 复校
覆瓿 复瓿
覆盂 复盂
覆盆 覆盆
覆盆子 覆盆子
覆盤 覆盘
覆育 复育
覆蕉尋鹿 复蕉寻鹿
覆逆 复逆
覆醢 复醢
覆醬瓿 复酱瓿
覆電 复电
覆露 复露
覆鹿尋蕉 复鹿寻蕉
覆鹿遺蕉 复鹿遗蕉
覆鼎 复鼎
見覆 见复
角徵 角徵
角徵羽 角徵羽
計畫 计划
變徵 变徵
變徵之聲 变徵之声
變徵之音 变徵之音
貂覆額 貂复额
買臣覆水 买臣复水
踅門瞭戶 踅门了户
躪藉 躏借
郭子乾 郭子乾
酒逢知己千鍾少 酒逢知己千锺少
酒逢知己千鍾少話不投機半句多 酒逢知己千锺少话不投机半句多
醞藉 酝借
重覆 重复
金吒 金吒
金鍊 金链
鈞覆 钧复
鉅子 钜子
鉅萬 钜万
鉅防 钜防
鉸鍊 铰链
銀鍊 银链
錢鍾書 钱锺书
鍊墜 链坠
鍊子 链子
鍊形 链形
鍊條 链条
鍊錘 链锤
鍊鎖 链锁
鍛鍾 锻锺
鍾繇 钟繇 锺繇
鍾萬梅 锺万梅
鍾重發 锺重发
鍾鍛 锺锻
鍾馗 锺馗
鎖鍊 锁链
鐵鍊 铁链
鑽石項鍊 钻石项链
雁杳魚沈 雁杳鱼沉
雖覆能復 虽覆能复
電覆 电复
露覆 露复
項鍊 项链
頗覆 颇复
頸鍊 颈链
顛乾倒坤 颠乾倒坤
顛倒乾坤 颠倒乾坤
顧藉 顾借
麼些族 麽些族
黄鍾公 黄锺公
龍鍾 龙钟 龙锺

View File

@ -0,0 +1,386 @@
PN結 PN接面
SQL注入 SQL隱碼攻擊
SQL注入攻擊 SQL隱碼攻擊
U盤 隨身碟
三極管 三極體
下拉列表 下拉選單
並行計算 平行計算
中間件 中介軟體
串口 串列埠
串行 序列
串行端口 串列埠
主引導記錄 主開機記錄
主板 主機板
二極管 二極體
互聯網 網際網路
交互 互動
交互式 互動式
人工智能 人工智慧
代碼 程式碼 代碼
代碼頁 內碼表
以太網 乙太網
任務欄 工作列
任務管理器 工作管理員
仿真 模擬
位圖 點陣圖
低級 低階 低級
便攜式 行動式 攜帶型
保存 儲存
信噪比 訊雜比
信息 資訊
信息安全 資訊保安
信息技術 資訊科技
信息論 資訊理論
信號 訊號 信號
信道 通道
傳感 感測
像素 畫素
僞代碼 虛擬碼
優先級 優先順序
優化 最佳化
元數據 後設資料
元編程 超程式設計
光標 游標
光盤 光碟
光驅 光碟機
免提 擴音
內存 記憶體
內核 核心
內置 內建
內聯函數 行內函數
全局 全域性
全角 全形
兼容 相容
冒泡排序 氣泡排序
函數 函式
函數式編程 函數語言程式設計
刀片服務器 刀鋒伺服器
分佈式 分散式
分區 分割槽
分辨率 解析度
刷新 重新整理
刻錄 燒錄
前綴 字首
剪切 剪下
剪貼板 剪貼簿
創建 建立
加載 載入
半角 半形
博客 部落格
卸載 解除安裝
原代碼 原始碼
參數 引數
參數表 參數列
句柄 控制代碼
可視化 視覺化
呼出 撥出
呼叫轉移 來電轉駁
命令式編程 指令式程式設計
命令行 命令列
命名空間 名稱空間
哈希 雜湊
單片機 微控制器
回調 回撥
固件 韌體
圖像 影象
圖庫 相簿
圖標 圖示
在線 線上
地址 地址 位址
地址欄 位址列
城域網 都會網路
堆棧 堆疊
場效應管 場效電晶體
壁紙 桌布 壁紙
外置 外接
外鍵 外來鍵
多任務 多工
多態 多型
多線程 多執行緒
字庫 字型檔
字段 欄位
字符 字元
字符串 字串
字符集 字符集
字節 位元組
字體 字型
存儲 儲存
存盤 存檔
宏 宏 巨集
宏內核 單核心
寄存器 暫存器
密鑰 金鑰
實例 例項 實例
實模式 真實模式
審覈 稽覈
寫保護 防寫
寬帶 寬頻
尋址 定址
對話框 對話方塊
對象 物件 對象
導入 匯入
導出 匯出
局域網 區域網
局部 區域性
屏幕 螢幕
屏蔽 遮蔽
嵌套 巢狀
布爾 布林
帶寬 頻寬
引導程序 載入程式
彙編 彙編 組譯
彙編語言 組合語言
後綴 字尾
循環 迴圈 循環
性價比 價效比
性能 效能
截取 擷取
截屏 截圖
打印 列印
打印機 印表機
打開 開啟 打開
批量 批次
拋出 丟擲
拷貝 複製
持久性 永續性
指針 指標
捲積 摺積
掃描儀 掃描器
掛斷 結束通話
採樣 取樣
採樣率 取樣率
接口 介面
控件 控制元件
插件 外掛
搜索 搜尋
操作數 運算元
操作符 運算子
操作系統 作業系統
擴展 擴充套件
擴展名 副檔名
支持 支援
支持者 支持者
散列 雜湊
數字 數字 數位
數字印刷 數位印刷
數字電子 數位電子
數字電路 數位電路
數據 資料
數據倉庫 資料倉儲
數據報 資料包
數據庫 資料庫
數據挖掘 資料探勘
數據源 資料來源
數組 陣列
文件 檔案
文件名 檔名
文件夾 資料夾
文件擴展名 副檔名
文字處理 文書處理
文本 文字
文檔 文件
映射 對映
時分多址 分時多重進接
時分複用 分時多工
時鐘頻率 時脈頻率
晶閘管 閘流體
晶體管 電晶體
智能 智慧
最終用戶 終端使用者
有損壓縮 有失真壓縮
服務器 伺服器
本地代碼 原生代碼
析構函數 解構函式
枚舉 列舉
查找 查詢
查看 檢視
桌面型 桌上型
構造函數 建構函式
標識符 識別符號
模塊 模組
模擬 模擬 類比
模擬電子 類比電子
模擬電路 類比電路
權限 許可權
正則表達式 正規表示式
死機 宕機
殺毒 防毒
比特 位元
比特幣 比特幣
比特率 位元率
波分複用 波長分波多工
消息 訊息 消息
添加 新增
源代碼 原始碼
源文件 原始檔
源碼 原始碼
溢出 溢位
滾動條 捲軸
演示文稿 簡報
激光 鐳射
激活 啟用
無損壓縮 無失真壓縮
物理內存 實體記憶體
物理地址 實體地址
狀態欄 狀態列
用戶 使用者
用戶名 使用者名稱
界面 介面
異步 非同步
登錄 登入
發佈 釋出
發送 傳送
皮膚 面板
盤片 碟片
盤符 碟符
目標代碼 目的碼
相冊 相簿
矢量 向量
知識產權 智慧財產權
短信 簡訊
硬件 硬體
硬盤 硬碟
碼分多址 分碼多重進接
碼率 位元速率
磁盤 磁碟
磁道 磁軌
社區 社羣 社區
移動硬盤 行動硬碟
移動網絡 行動網路
移動資料 行動資料
移動通信 行動通訊
移動電話 行動電話
程序 程式
程序員 程式設計師
空分多址 分空間多重進接
空分複用 空間多工
窗口 視窗
端口 埠
筆記本電腦 膝上型電腦
算子 運算元
算法 演算法
範式 正規化
粘貼 貼上 粘貼
紅心大戰 傷心小棧
組件 元件
綁定 繫結
網上鄰居 網路上的芳鄰
網卡 網絡卡
網吧 網咖
網絡 網路
網關 閘道器
線程 執行緒
編程 程式設計
編程語言 程式語言
緩存 快取
縮略圖 縮圖
縮進 縮排
總線 匯流排
缺省 預設
聯繫 聯絡
聯繫歷史 通話記錄
聲卡 音效卡
聲明 宣告
脫機 離線
腳本 指令碼
自動轉屏 自動旋轉螢幕
臺式機 桌上型電腦
航天飛機 太空梭
芯片 晶片
花屏 破圖
菜單 選單 菜單
萬維網 全球資訊網
藍屏 藍色畫面
藍牙 藍芽
虛函數 虛擬函式
虛擬機 虛擬機器
表達式 表示式 運算式
複印 影印
複選按鈕 覈取按鈕
複選框 覈取方塊
視圖 檢視
視頻 影片 視訊
解釋器 直譯器
觸摸 觸控
觸摸屏 觸控式螢幕
計算機安全 電腦保安
計算機科學 電腦科學
訪問 訪問 存取
設備 裝置
設置 設定
註冊機 序號產生器
註冊表 登錄檔
註銷 登出
調制 調變
調度 排程
調用 呼叫
調色板 調色盤
調製解調器 數據機
調試 除錯 偵錯
調試器 偵錯程式
變量 變數
軟件 軟體
軟驅 軟碟機
轉義字符 跳脫字元
通信 通訊
通訊卡 通話卡
通配符 萬用字元
連接 連線
連接器 聯結器
進制 進位制
進程 程序 進程
運算符 運算子
運行 執行
過程式編程 程序式程式設計
遞歸 遞迴
遠程 遠端
適配器 介面卡
邏輯門 邏輯閘
重命名 重新命名
重裝 重灌
重載 過載
金屬氧化物半導體 金氧半導體
錄像 錄影
鏈接 連結
鏈表 連結串列
鏡像 映象
門戶網站 入口網站
門電路 閘電路
閃存 快閃記憶體
關係數據庫 關聯式資料庫
隊列 佇列
集成 整合
集成電路 積體電路
集羣 叢集
雲存儲 雲端儲存
雲計算 雲端計算
面向對象 物件導向
面向過程 程序導向
音頻 音訊
頁眉 頁首
頁腳 頁尾
項目 專案
預處理器 前處理器
頭文件 標頭檔案
頻分多址 分頻多重進接
頻分複用 分頻多工
類型 型別
類模板 類别範本
顯像管 映象管
顯卡 顯示卡
顯存 視訊記憶體
飛行模式 飛航模式
首席信息官 資訊長
首席執行官 執行長
首席技術官 技術長
首席運營官 營運長
高性能計算 高效能運算
高清 高畫質
高端 高階 進階
高級 高階 進階 高級
高速緩存 快取記憶體
黑客 駭客
默認 預設
默認值 預設值
點擊 點選
鼠標 滑鼠

View File

@ -0,0 +1,84 @@
乍得 查德
也門 葉門
仙童半導體 快捷半導體
伯利茲 貝里斯
佛得角 維德角
傅里葉 傅立葉
克羅地亞 克羅埃西亞
列支敦士登 列支敦斯登
利比里亞 賴比瑞亞
加納 迦納
加蓬 加彭
博茨瓦納 波札那
卡塔爾 卡達
危地馬拉 瓜地馬拉
厄瓜多爾 厄瓜多
厄立特里亞 厄利垂亞
吉布堤 吉布地
哈薩克斯坦 哈薩克
哥斯達黎加 哥斯大黎加
喫茶小舖 喫茶小舖
圖瓦盧 吐瓦魯
土庫曼斯坦 土庫曼
圭亞那 蓋亞那
坦桑尼亞 坦尚尼亞
埃塞俄比亞 衣索比亞
基里巴斯 吉里巴斯
塔吉克斯坦 塔吉克
塞拉利昂 獅子山
塞浦路斯 塞普勒斯
塞舌爾 塞席爾
多米尼加 多明尼加
安提瓜和巴布達 安地卡及巴布達
尼日利亞 奈及利亞
尼日爾 尼日
岡比亞 甘比亞
巴巴多斯 巴貝多
巴布亞新幾內亞 巴布亞紐幾內亞
布基納法索 布吉納法索
布隆迪 蒲隆地
帕勞 帛琉
幾內亞比紹 幾內亞比索
意大利 義大利
所羅門羣島 索羅門羣島
文萊 汶萊
斯威士蘭 史瓦濟蘭
斯洛文尼亞 斯洛維尼亞
新西蘭 紐西蘭
格林納達 格瑞那達
格魯吉亞 喬治亞
歐拉 尤拉
毛里塔尼亞 茅利塔尼亞
毛里求斯 模里西斯
沙特阿拉伯 沙烏地阿拉伯
波斯尼亞黑塞哥維那 波士尼亞赫塞哥維納
津巴布韋 辛巴威
洪都拉斯 宏都拉斯
溫納圖萬 那杜
烏茲別克斯坦 烏茲別克
特立尼達和多巴哥 千里達及托巴哥
瑙魯 諾魯
瓦努阿圖 萬那杜
盧旺達 盧安達
科摩羅 葛摩
科特迪瓦 象牙海岸
突尼斯 突尼西亞
純喫茶 純喫茶
索馬里 索馬利亞
老撾 寮國
聖基茨和尼維斯 聖克里斯多福及尼維斯
聖文森特和格林納丁斯 聖文森及格瑞那丁
聖盧西亞 聖露西亞
聖馬力諾 聖馬利諾
肯尼亞 肯亞
莫桑比克 莫三比克
萊索托 賴索托
萬象 永珍
蘇里南 蘇利南
貝寧 貝南
贊比亞 尚比亞
阿塞拜疆 亞塞拜然
阿拉伯聯合酋長國 阿拉伯聯合大公國
香農 夏農
馬爾代夫 馬爾地夫
馬里共和國 馬利共和國

View File

@ -0,0 +1,36 @@
元音 母音
冰棍 冰棒
出租車 計程車
咖喱 咖哩
塑料 塑膠
奔馳 賓士
奶酪 乳酪
幾率 機率
方便麪 泡麵 速食麵
李彥宏 李彥宏
概率 機率
海內存知己 海內存知己
涼菜 冷盤
的士 計程車
砹 砈
硅 矽
程序不正義 程序不正義
程序正義 程序正義
空氣淨化器 空氣清淨機
納米 奈米
自行車 腳踏車
詞組 片語
蹦極 高空彈跳
輔音 子音
通過 透過 通過
酰 醯
鈁 鍅
鈈 鈽
錇 鉳
鍀 鎝
鎄 鑀
鎇 鋂
鎿 錼
鐦 鉲
鑥 鎦
黃宏 黃宏

View File

@ -0,0 +1,516 @@
PN接面 PN結
SQL隱碼攻擊 SQL注入 SQL注入攻擊
三極體 三極管
下拉選單 下拉列表
丟擲 拋出
中介軟體 中間件
串列埠 串口 串行端口
主機板 主板
主開機記錄 主引導記錄
乙太網 以太網
乳酪 奶酪
二極體 二極管
互動 交互
互動式 交互式
亞塞拜然 阿塞拜疆
人工智慧 人工智能
介面 接口 界面
介面卡 適配器
代碼 代碼
伺服器 服務器
佇列 隊列
位元 比特
位元率 比特率
位元組 字節
位元速率 碼率
位址 地址
位址列 地址欄
低級 低級
低階 低級
作業系統 操作系統
使用者 用戶
使用者名稱 用戶名
來電轉駁 呼叫轉移
例項 實例
信號 信號
偵錯 調試
偵錯程式 調試器
傅立葉 傅里葉
傳送 發送
傷心小棧 紅心大戰
價效比 性價比
優先順序 優先級
儲存 保存 存儲
元件 組件
光碟 光盤
光碟機 光驅
克羅埃西亞 克羅地亞
入口網站 門戶網站
內建 內置
內碼表 代碼頁
全域性 全局
全形 全角
全球資訊網 萬維網
冰棒 冰棍
冷盤 涼菜
函式 函數
函數語言程式設計 函數式編程
刀鋒伺服器 刀片服務器
分割槽 分區
分散式 分佈式
分時多工 時分複用
分時多重進接 時分多址
分碼多重進接 碼分多址
分空間多重進接 空分多址
分頻多工 頻分複用
分頻多重進接 頻分多址
列印 打印
列支敦斯登 列支敦士登
列舉 枚舉
前處理器 預處理器
剪下 剪切
剪貼簿 剪貼板
副檔名 擴展名 文件擴展名
加彭 加蓬
匯入 導入
匯出 導出
匯流排 總線
區域性 局部
區域網 局域網
千里達及托巴哥 特立尼達和多巴哥
半形 半角
卡達 卡塔爾
印表機 打印機
厄利垂亞 厄立特里亞
厄瓜多 厄瓜多爾
原始檔 源文件
原始碼 原代碼 源代碼 源碼
原生代碼 本地代碼
參數列 參數表
取樣 採樣
取樣率 採樣率
叢集 集羣
史瓦濟蘭 斯威士蘭
吉布地 吉布堤
吉里巴斯 基里巴斯
名稱空間 命名空間
吐瓦魯 圖瓦盧
向量 矢量
呼叫 調用
命令列 命令行
咖哩 咖喱
哈薩克 哈薩克斯坦
哥斯大黎加 哥斯達黎加
啟用 激活
喫茶小舖 喫茶小舖
喬治亞 格魯吉亞
單核心 宏內核
回撥 回調
圖示 圖標
土庫曼 土庫曼斯坦
地址 地址
坦尚尼亞 坦桑尼亞
型別 類型
埠 端口
執行 運行
執行緒 線程
執行長 首席執行官
堆疊 堆棧
場效電晶體 場效應管
塑膠 塑料
塔吉克 塔吉克斯坦
塞席爾 塞舌爾
塞普勒斯 塞浦路斯
壁紙 壁紙
夏農 香農
外來鍵 外鍵
外掛 插件
外接 外置
多型 多態
多執行緒 多線程
多工 多任務
多明尼加 多米尼加
太空梭 航天飛機
奈及利亞 尼日利亞
奈米 納米
子音 輔音
字串 字符串
字元 字符
字型 字體
字型檔 字庫
字尾 後綴
字符集 字符集
字首 前綴
存取 訪問
存檔 存盤
安地卡及巴布達 安提瓜和巴布達
宏 宏
宏都拉斯 洪都拉斯
宕機 死機
定址 尋址
宣告 聲明
實例 實例
實體地址 物理地址
實體記憶體 物理內存
寬頻 寬帶
寮國 老撾
專案 項目
對映 映射
對話方塊 對話框
對象 對象
尚比亞 贊比亞
尤拉 歐拉
尼日 尼日爾
巢狀 嵌套
工作列 任務欄
工作管理員 任務管理器
巨集 宏
巴布亞紐幾內亞 巴布亞新幾內亞
巴貝多 巴巴多斯
布吉納法索 布基納法索
布林 布爾
帛琉 帕勞
平行計算 並行計算
幾內亞比索 幾內亞比紹
序列 串行
序號產生器 註冊機
建構函式 構造函數
建立 創建
引數 參數
彙編 彙編
影印 複印
影片 視頻
影象 圖像
後設資料 元數據
循環 循環
微控制器 單片機
快取 緩存
快取記憶體 高速緩存
快捷半導體 仙童半導體
快閃記憶體 閃存
感測 傳感
截圖 截屏
打開 打開
批次 批量
技術長 首席技術官
指令式程式設計 命令式編程
指令碼 腳本
指標 指針
捲軸 滾動條
掃描器 掃描儀
排程 調度
控制代碼 句柄
控制元件 控件
搜尋 搜索
摺積 捲積
撥出 呼出
擴充套件 擴展
擴音 免提
擷取 截取
攜帶型 便攜式
支持者 支持者
支援 支持
效能 性能
整合 集成
數位 數字
數位印刷 數字印刷
數位電子 數字電子
數位電路 數字電路
數字 數字
數據機 調製解調器
文件 文檔
文字 文本
文書處理 文字處理
斯洛維尼亞 斯洛文尼亞
新增 添加
映象 鏡像
映象管 顯像管
時脈頻率 時鐘頻率
晶片 芯片
智慧 智能
智慧財產權 知識產權
暫存器 寄存器
最佳化 優化
有失真壓縮 有損壓縮
李彥宏 李彥宏
查德 乍得
查詢 查找
核心 內核
格瑞那達 格林納達
桌上型 桌面型
桌上型電腦 臺式機
桌布 壁紙
標頭檔案 頭文件
模擬 仿真 模擬
模組 模塊
模里西斯 毛里求斯
機率 幾率 概率
檔名 文件名
檔案 文件
檢視 查看 視圖
欄位 字段
正規化 範式
正規表示式 正則表達式
母音 元音
比特幣 比特幣
氣泡排序 冒泡排序
永珍 萬象
永續性 持久性
汶萊 文萊
沙烏地阿拉伯 沙特阿拉伯
泡麵 方便麪
波士尼亞赫塞哥維納 波斯尼亞黑塞哥維那
波札那 博茨瓦納
波長分波多工 波分複用
海內存知己 海內存知己
消息 消息
游標 光標
溢位 溢出
滑鼠 鼠標
演算法 算法
烏茲別克 烏茲別克斯坦
無失真壓縮 無損壓縮
燒錄 刻錄
營運長 首席運營官
片語 詞組
物件 對象
物件導向 面向對象
狀態列 狀態欄
獅子山 塞拉利昂
瓜地馬拉 危地馬拉
甘比亞 岡比亞
畫素 像素
登入 登錄
登出 註銷
登錄檔 註冊表
盧安達 盧旺達
目的碼 目標代碼
直譯器 解釋器
相容 兼容
相簿 圖庫 相冊
真實模式 實模式
矽 硅
砈 砹
破圖 花屏
硬碟 硬盤
硬體 硬件
碟片 盤片
碟符 盤符
磁碟 磁盤
磁軌 磁道
社區 社區
社羣 社區
程序 進程
程序不正義 程序不正義
程序導向 面向過程
程序式程式設計 過程式編程
程序正義 程序正義
程式 程序
程式碼 代碼
程式設計 編程
程式設計師 程序員
程式語言 編程語言
稽覈 審覈
積體電路 集成電路
空氣清淨機 空氣淨化器
空間多工 空分複用
突尼西亞 突尼斯
簡報 演示文稿
簡訊 短信
粘貼 粘貼
紐西蘭 新西蘭
純喫茶 純喫茶
索羅門羣島 所羅門羣島
索馬利亞 索馬里
終端使用者 最終用戶
組合語言 彙編語言
組譯 彙編
結束通話 掛斷
維德角 佛得角
網咖 網吧
網絡卡 網卡
網路 網絡
網路上的芳鄰 網上鄰居
網際網路 互聯網
線上 在線
縮圖 縮略圖
縮排 縮進
繫結 綁定
義大利 意大利
聖克里斯多福及尼維斯 聖基茨和尼維斯
聖文森及格瑞那丁 聖文森特和格林納丁斯
聖露西亞 聖盧西亞
聖馬利諾 聖馬力諾
聯結器 連接器
聯絡 聯繫
肯亞 肯尼亞
腳踏車 自行車
膝上型電腦 筆記本電腦
自動旋轉螢幕 自動轉屏
茅利塔尼亞 毛里塔尼亞
莫三比克 莫桑比克
菜單 菜單
萬用字元 通配符
萬那杜 瓦努阿圖
葉門 也門
葛摩 科摩羅
蒲隆地 布隆迪
蓋亞那 圭亞那
藍色畫面 藍屏
藍芽 藍牙
蘇利南 蘇里南
虛擬函式 虛函數
虛擬機器 虛擬機
虛擬碼 僞代碼
螢幕 屏幕
行內函數 內聯函數
行動式 便攜式
行動硬碟 移動硬盤
行動網路 移動網絡
行動資料 移動資料
行動通訊 移動通信
行動電話 移動電話
衣索比亞 埃塞俄比亞
表示式 表達式
裝置 設備
複製 拷貝
覈取按鈕 複選按鈕
覈取方塊 複選框
視窗 窗口
視覺化 可視化
視訊 視頻
視訊記憶體 顯存
解析度 分辨率
解構函式 析構函數
解除安裝 卸載
觸控 觸摸
觸控式螢幕 觸摸屏
計程車 出租車 的士
訊息 消息
訊號 信號
訊雜比 信噪比
記憶體 內存
訪問 訪問
設定 設置
許可權 權限
調色盤 調色板
調變 調制
諾魯 瑙魯
識別符號 標識符
變數 變量
象牙海岸 科特迪瓦
貝南 貝寧
貝里斯 伯利茲
貼上 粘貼
資料 數據
資料來源 數據源
資料倉儲 數據倉庫
資料包 數據報
資料夾 文件夾
資料庫 數據庫
資料探勘 數據挖掘
資訊 信息
資訊保安 信息安全
資訊理論 信息論
資訊科技 信息技術
資訊長 首席信息官
賓士 奔馳
賴比瑞亞 利比里亞
賴索托 萊索托
超程式設計 元編程
跳脫字元 轉義字符
軟碟機 軟驅
軟體 軟件
載入 加載
載入程式 引導程序
辛巴威 津巴布韋
迦納 加納
迴圈 循環
透過 通過
通訊 通信
通話卡 通訊卡
通話記錄 聯繫歷史
通過 通過
通道 信道
速食麵 方便麪
連結 鏈接
連結串列 鏈表
連線 連接
進位制 進制
進程 進程
進階 高端 高級
運算元 操作數 算子
運算子 操作符 運算符
運算式 表達式
過載 重載
遞迴 遞歸
遠端 遠程
遮蔽 屏蔽
選單 菜單
邏輯閘 邏輯門
那杜 溫納圖萬
部落格 博客
都會網路 城域網
醯 酰
釋出 發佈
重新命名 重命名
重新整理 刷新
重灌 重裝
金氧半導體 金屬氧化物半導體
金鑰 密鑰
鈽 鈈
鉲 鐦
鉳 錇
鋂 鎇
錄影 錄像
錼 鎿
鍅 鈁
鎝 鍀
鎦 鑥
鐳射 激光
鑀 鎄
開啟 打開
閘流體 晶閘管
閘道器 網關
閘電路 門電路
關聯式資料庫 關係數據庫
防寫 寫保護
防毒 殺毒
阿拉伯聯合大公國 阿拉伯聯合酋長國
陣列 數組
除錯 調試
隨身碟 U盤
雜湊 哈希 散列
離線 脫機
雲端儲存 雲存儲
雲端計算 雲計算
電晶體 晶體管
電腦保安 計算機安全
電腦科學 計算機科學
非同步 異步
面板 皮膚
韌體 固件
音效卡 聲卡
音訊 音頻
頁尾 頁腳
頁首 頁眉
預設 缺省 默認
預設值 默認值
頻寬 帶寬
類别範本 類模板
類比 模擬
類比電子 模擬電子
類比電路 模擬電路
顯示卡 顯卡
飛航模式 飛行模式
馬利共和國 馬里共和國
馬爾地夫 馬爾代夫
駭客 黑客
高效能運算 高性能計算
高畫質 高清
高空彈跳 蹦極
高級 高級
高階 高端 高級
黃宏 黃宏
點選 點擊
點陣圖 位圖

View File

@ -0,0 +1,39 @@
僞 偽
啓 啟
喫 吃
嫺 嫻
嬀 媯
峯 峰
幺 么
擡 抬
棱 稜
檐 簷
污 汙
泄 洩
潙 溈
潨 潀
爲 為
牀 床
痹 痺
癡 痴
皁 皂
着 著
睾 睪
祕 秘
竈 灶
糉 粽
繮 韁
纔 才
羣 群
脣 唇
蔘 參
蔿 蒍
衆 眾
裏 裡
覈 核
踊 踴
鉢 缽
鍼 針
鮎 鯰
麪 麵
齶 顎

View File

@ -0,0 +1,39 @@
么 么 幺
偽 僞
參 蔘
吃 喫
唇 脣
啟 啓
媯 嬀
嫻 嫺
峰 峯
床 牀
才 才 纔
抬 擡
核 核 覈
汙 污
洩 泄
溈 潙
潀 潨
灶 竈
為 爲
痴 癡
痺 痹
皂 皁 皂
眾 衆
睪 睾 睪
秘 祕
稜 棱
簷 檐
粽 糉
缽 鉢
群 羣
著 着 著
蒍 蔿
裡 裏
踴 踊
針 針 鍼
韁 繮
顎 齶
鯰 鮎
麵 麪

View File

@ -0,0 +1,68 @@
一口吃個 一口喫個
一口吃成 一口喫成
一家三口 一家三口
一家五口 一家五口
一家六口 一家六口
一家四口 一家四口
凶事 凶事
凶信 凶信
凶兆 凶兆
凶吉 凶吉
凶地 凶地
凶多吉少 凶多吉少
凶宅 凶宅
凶年 凶年
凶德 凶德
凶怪 凶怪
凶日 凶日
凶服 凶服
凶歲 凶歲
凶死 凶死
凶氣 凶氣
凶煞 凶煞
凶燄 凶燄
凶神 凶神
凶禮 凶禮
凶耗 凶耗
凶肆 凶肆
凶荒 凶荒
凶訊 凶訊
凶豎 凶豎
凶身 凶身
凶逆 凶逆
凶門 凶門
口吃 口吃
吃口 喫口 吃口
吃口令 吃口令
吃口飯 喫口飯
吃吃 喫喫 吃吃
吃子 喫子 吃子
合著 合著
吉凶 吉凶
名著 名著
四凶 四凶
大凶 大凶
巨著 巨著
張口 張口
昭著 昭著
歲凶 歲凶
胃口 胃口
著作 著作
著名 著名
著式 著式
著志 著志
著於 著於
著書 著書
著白 著白
著稱 著稱
著者 著者
著述 著述
著錄 著錄
蹇吃 蹇吃
逢凶 逢凶
避凶 避凶
鄧艾吃 鄧艾吃
鉅著 鉅著
開口 開口
閔凶 閔凶
顯著 顯著

View File

@ -16,7 +16,9 @@
package com.google.android.exoplayer2;
import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.drm.DrmSession;
@ -26,6 +28,7 @@ import com.google.android.exoplayer2.source.SampleStream;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MediaClock;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;
/**
@ -183,7 +186,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
return ADAPTIVE_NOT_SUPPORTED;
}
// PlayerMessage.Target implementation.
// PlayerMessage.CCTarget implementation.
@Override
public void handleMessage(int what, @Nullable Object object) throws ExoPlaybackException {

View File

@ -16,19 +16,23 @@
package com.google.android.exoplayer2;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.source.SampleStream;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MediaClock;
import java.io.IOException;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import java.io.IOException;
/**
* A {@link Renderer} implementation whose track type is {@link C#TRACK_TYPE_NONE} and does not
* consume data from its {@link SampleStream}.
*/
public abstract class NoSampleRenderer implements Renderer, RendererCapabilities {
@MonotonicNonNull private RendererConfiguration configuration;
@MonotonicNonNull
private RendererConfiguration configuration;
private int index;
private int state;
@Nullable private SampleStream stream;
@ -196,7 +200,7 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
return ADAPTIVE_NOT_SUPPORTED;
}
// PlayerMessage.Target implementation.
// PlayerMessage.CCTarget implementation.
@Override
public void handleMessage(int what, @Nullable Object object) throws ExoPlaybackException {

View File

@ -16,6 +16,7 @@
package com.google.android.exoplayer2.extractor.wav;
import android.util.Pair;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.ParserException;
@ -30,10 +31,12 @@ import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;
import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import java.io.IOException;
/**
* Extracts data from WAV byte streams.
*/
@ -313,9 +316,11 @@ public final class WavExtractor implements Extractor {
/** Number of frames per block of the input (yet to be decoded) data. */
private final int framesPerBlock;
/** Target for the input (yet to be decoded) data. */
/**
* CCTarget for the input (yet to be decoded) data.
*/
private final byte[] inputData;
/** Target for decoded (yet to be output) data. */
/** CCTarget for decoded (yet to be output) data. */
private final ParsableByteArray decodedData;
/** The target size of each output sample, in frames. */
private final int targetSampleSizeFrames;

View File

@ -141,7 +141,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import kotlin.Unit;
import kotlin.text.StringsKt;
import tw.nekomimi.nekogram.NekoConfig;
import tw.nekomimi.nekogram.cc.CCConverter;
import tw.nekomimi.nekogram.cc.CCTarget;
import tw.nekomimi.nekogram.transtale.TranslateDb;
import tw.nekomimi.nekogram.transtale.Translator;
import tw.nekomimi.nekogram.transtale.TranslatorKt;
@ -3244,6 +3247,42 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
});
cell.setMinimumWidth(AndroidUtilities.dp(196));
menuPopupLayout.addView(cell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT, 0, 48 * a++, 0, 0));
cell = new ActionBarMenuSubItem(getContext());
cell.setTextAndIcon(LocaleController.getString("Translate", R.string.OpenCC), R.drawable.ic_translate);
ActionBarMenuSubItem finalCell1 = cell;
cell.setOnClickListener(v -> {
if (menuPopupWindow != null && menuPopupWindow.isShowing()) {
menuPopupWindow.dismiss();
}
String ccTarget = TranslateDb.getChatCCTarget(chatId, NekoConfig.ccInputLang);
if (ccTarget == null || StringsKt.isBlank(ccTarget)) {
Translator.showCCTargetSelect(finalCell1, (target) -> {
if (menuPopupWindow != null && menuPopupWindow.isShowing()) {
menuPopupWindow.dismiss();
}
ccComment(target);
TranslateDb.saveChatCCTarget(chatId, target);
return Unit.INSTANCE;
});
return;
}
ccComment(ccTarget);
});
cell.setOnLongClickListener(v -> {
Translator.showCCTargetSelect(finalCell1, (target) -> {
if (menuPopupWindow != null && menuPopupWindow.isShowing()) {
menuPopupWindow.dismiss();
}
ccComment(target);
TranslateDb.saveChatCCTarget(chatId, target);
return Unit.INSTANCE;
});
return true;
});
cell.setMinimumWidth(AndroidUtilities.dp(196));
menuPopupLayout.addView(cell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT, 0, 48 * a++, 0, 0));
}
@ -3561,6 +3600,12 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
}
private void ccComment(String target) {
String text = messageEditText.getText().toString();
text = CCConverter.get(CCTarget.valueOf(target)).convert(text);
messageEditText.setText(text);
}
public boolean isSendButtonVisible() {
return sendButton.getVisibility() == VISIBLE;
}

View File

@ -101,6 +101,9 @@ public class NekoConfig {
public static String translateToLang;
public static String translateInputLang;
public static String ccToLang;
public static String ccInputLang;
public static boolean hideProxyByDefault;
public static boolean useProxyItem;
@ -232,6 +235,9 @@ public class NekoConfig {
translateToLang = preferences.getString("trans_to_lang", null);
translateInputLang = preferences.getString("trans_input_to_lang", "en");
translateToLang = preferences.getString("opencc_to_lang", null);
translateInputLang = preferences.getString("opencc_input_to_lang", null);
tabsTitleType = preferences.getInt("tabsTitleType", TITLE_TYPE_TEXT);
confirmAVMessage = preferences.getBoolean("confirmAVMessage", false);
askBeforeCall = preferences.getBoolean("askBeforeCall", false);
@ -804,4 +810,18 @@ public class NekoConfig {
preferences.edit().putBoolean("sendCommentAfterForward", sendCommentAfterForward = !sendCommentAfterForward).apply();
}
public static void setCCToLang(String toLang) {
preferences.edit().putString("opencc_to_lang", ccToLang = toLang).apply();
}
public static void setCCInputToLang(String toLang) {
preferences.edit().putString("opencc_input_to_lang", ccInputLang = toLang).apply();
}
}

View File

@ -0,0 +1,455 @@
package tw.nekomimi.nekogram.cc;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.LinkedBlockingDeque;
public class AhoCorasickDoubleArrayTrie<V> {
protected int[] check;
protected int[] base;
int[] fail;
int[][] output;
protected V[] v;
protected int[] l;
protected int size;
public void parseText(char[] text, IHit<V> processor) {
int position = 1;
int currentState = 0;
for (char c : text) {
currentState = getState(currentState, c);
int[] hitArray = output[currentState];
if (hitArray != null) {
for (int hit : hitArray) {
processor.hit(position - l[hit], position, v[hit]);
}
}
++position;
}
}
public void save(DataOutputStream out) throws Exception {
out.writeInt(size);
for (int i = 0; i < size; i++) {
out.writeInt(base[i]);
out.writeInt(check[i]);
out.writeInt(fail[i]);
int[] output = this.output[i];
if (output == null) {
out.writeInt(0);
} else {
out.writeInt(output.length);
for (int o : output) {
out.writeInt(o);
}
}
}
out.writeInt(l.length);
for (int length : l) {
out.writeInt(length);
}
}
public void save(ObjectOutputStream out) throws IOException {
out.writeObject(base);
out.writeObject(check);
out.writeObject(fail);
out.writeObject(output);
out.writeObject(l);
}
public void load(ObjectInputStream in, V[] value) throws IOException, ClassNotFoundException {
base = (int[]) in.readObject();
check = (int[]) in.readObject();
fail = (int[]) in.readObject();
output = (int[][]) in.readObject();
l = (int[]) in.readObject();
v = value;
}
public V get(String key) {
int index = exactMatchSearch(key);
if (index >= 0) {
return v[index];
}
return null;
}
public boolean set(String key, V value) {
int index = exactMatchSearch(key);
if (index >= 0) {
v[index] = value;
return true;
}
return false;
}
public V get(int index) {
return v[index];
}
public interface IHit<V> {
void hit(int begin, int end, V value);
}
public static class Hit<V> {
public final int begin;
public final int end;
public final V value;
public Hit(int begin, int end, V value) {
this.begin = begin;
this.end = end;
this.value = value;
}
}
private int getState(int currentState, char character) {
int newCurrentState = transitionWithRoot(currentState, character);
while (newCurrentState == -1) {
currentState = fail[currentState];
newCurrentState = transitionWithRoot(currentState, character);
}
return newCurrentState;
}
protected int transition(int current, char c) {
int b = current;
int p;
p = b + c + 1;
if (b == check[p])
b = base[p];
else
return -1;
p = b;
return p;
}
protected int transitionWithRoot(int nodePos, char c) {
int b = base[nodePos];
int p;
p = b + c + 1;
if (b != check[p]) {
if (nodePos == 0) return 0;
return -1;
}
return p;
}
public void build(TreeMap<String, V> map) {
new Builder().build(map);
}
private int fetch(State parent, List<Map.Entry<Integer, State>> siblings) {
if (parent.isAcceptable()) {
State fakeNode = new State(-(parent.getDepth() + 1));
fakeNode.addEmit(parent.getLargestValueId());
siblings.add(new AbstractMap.SimpleEntry<>(0, fakeNode));
}
for (Map.Entry<Character, State> entry : parent.getSuccess().entrySet()) {
siblings.add(new AbstractMap.SimpleEntry<>(entry.getKey() + 1, entry.getValue()));
}
return siblings.size();
}
private int exactMatchSearch(String key) {
int result = -1;
char[] keyChars = key.toCharArray();
int b = base[0];
int p;
for (int i = 0; i < 0; i++) {
p = b + (int) (keyChars[i]) + 1;
if (b == check[p])
b = base[p];
else
return result;
}
p = b;
int n = base[p];
if (b == check[p] && n < 0) {
result = -n - 1;
}
return result;
}
public int size() {
return v == null ? 0 : v.length;
}
private class Builder {
private State rootState = new State();
private boolean[] used;
private int allocSize;
private int progress;
private int nextCheckPos;
private int keySize;
@SuppressWarnings("unchecked")
public void build(TreeMap<String, V> map) {
v = (V[]) map.values().toArray();
l = new int[v.length];
Set<String> keySet = map.keySet();
addAllKeyword(keySet);
buildDoubleArrayTrie(keySet);
used = null;
constructFailureStates();
rootState = null;
loseWeight();
}
private void addKeyword(String keyword, int index) {
State currentState = this.rootState;
for (Character character : keyword.toCharArray()) {
currentState = currentState.addState(character);
}
currentState.addEmit(index);
l[index] = keyword.length();
}
private void addAllKeyword(Collection<String> keywordSet) {
int i = 0;
for (String keyword : keywordSet) {
addKeyword(keyword, i++);
}
}
private void constructFailureStates() {
fail = new int[size + 1];
fail[1] = base[0];
output = new int[size + 1][];
Queue<State> queue = new LinkedBlockingDeque<>();
for (State depthOneState : this.rootState.getStates()) {
depthOneState.setFailure(this.rootState, fail);
queue.add(depthOneState);
constructOutput(depthOneState);
}
while (!queue.isEmpty()) {
State currentState = queue.remove();
for (Character transition : currentState.getTransitions()) {
State targetState = currentState.nextState(transition);
queue.add(targetState);
State traceFailureState = currentState.failure();
while (traceFailureState.nextState(transition) == null) {
traceFailureState = traceFailureState.failure();
}
State newFailureState = traceFailureState.nextState(transition);
targetState.setFailure(newFailureState, fail);
targetState.addEmit(newFailureState.emit());
constructOutput(targetState);
}
}
}
private void constructOutput(State targetState) {
Collection<Integer> emit = targetState.emit();
if (emit == null || emit.size() == 0) return;
int[] output = new int[emit.size()];
Iterator<Integer> it = emit.iterator();
for (int i = 0; i < output.length; ++i) {
output[i] = it.next();
}
AhoCorasickDoubleArrayTrie.this.output[targetState.getIndex()] = output;
}
private void buildDoubleArrayTrie(Set<String> keySet) {
progress = 0;
keySize = keySet.size();
resize(65536 * 32);
base[0] = 1;
nextCheckPos = 0;
State root_node = this.rootState;
List<Map.Entry<Integer, State>> siblings = new ArrayList<>(root_node.getSuccess().entrySet().size());
fetch(root_node, siblings);
insert(siblings);
}
private void resize(int newSize) {
int[] base2 = new int[newSize];
int[] check2 = new int[newSize];
boolean[] used2 = new boolean[newSize];
if (allocSize > 0) {
System.arraycopy(base, 0, base2, 0, allocSize);
System.arraycopy(check, 0, check2, 0, allocSize);
System.arraycopy(used, 0, used2, 0, allocSize);
}
base = base2;
check = check2;
used = used2;
allocSize = newSize;
}
private int insert(List<Map.Entry<Integer, State>> siblings) {
int begin;
int pos = Math.max(siblings.get(0).getKey() + 1, nextCheckPos) - 1;
int nonzero_num = 0;
int first = 0;
if (allocSize <= pos)
resize(pos + 1);
outer:
while (true) {
pos++;
if (allocSize <= pos)
resize(pos + 1);
if (check[pos] != 0) {
nonzero_num++;
continue;
} else if (first == 0) {
nextCheckPos = pos;
first = 1;
}
begin = pos - siblings.get(0).getKey();
if (allocSize <= (begin + siblings.get(siblings.size() - 1).getKey())) {
double l = Math.max(1.05, 1.0 * keySize / (progress + 1));
resize((int) (allocSize * l));
}
if (used[begin])
continue;
for (int i = 1; i < siblings.size(); i++)
if (check[begin + siblings.get(i).getKey()] != 0)
continue outer;
break;
}
if (1.0 * nonzero_num / (pos - nextCheckPos + 1) >= 0.95)
nextCheckPos = pos;
used[begin] = true;
size = Math.max(size, begin + siblings.get(siblings.size() - 1).getKey() + 1);
for (Map.Entry<Integer, State> sibling : siblings) {
check[begin + sibling.getKey()] = begin;
}
for (Map.Entry<Integer, State> sibling : siblings) {
List<Map.Entry<Integer, State>> new_siblings = new ArrayList<>(sibling.getValue().getSuccess().entrySet().size() + 1);
if (fetch(sibling.getValue(), new_siblings) == 0) {
base[begin + sibling.getKey()] = (-sibling.getValue().getLargestValueId() - 1);
progress++;
} else {
int h = insert(new_siblings);
base[begin + sibling.getKey()] = h;
}
sibling.getValue().setIndex(begin + sibling.getKey());
}
return begin;
}
private void loseWeight() {
int[] nbase = new int[size + 65535];
System.arraycopy(base, 0, nbase, 0, size);
base = nbase;
int[] ncheck = new int[size + 65535];
System.arraycopy(check, 0, ncheck, 0, size);
check = ncheck;
}
}
private static class State {
protected final int depth;
private State failure = null;
private Set<Integer> emits = null;
private final Map<Character, State> success = new TreeMap<>();
private int index;
public State() {
this(0);
}
public State(int depth) {
this.depth = depth;
}
public int getDepth() {
return this.depth;
}
public void addEmit(int keyword) {
if (this.emits == null) {
this.emits = new TreeSet<>(Collections.reverseOrder());
}
this.emits.add(keyword);
}
public Integer getLargestValueId() {
if (emits == null || emits.size() == 0) return null;
return emits.iterator().next();
}
public void addEmit(Collection<Integer> emits) {
for (int emit : emits) {
addEmit(emit);
}
}
public Collection<Integer> emit() {
return this.emits == null ? Collections.emptyList() : this.emits;
}
public boolean isAcceptable() {
return this.depth > 0 && this.emits != null;
}
public State failure() {
return this.failure;
}
public void setFailure(State failState, int[] fail) {
this.failure = failState;
fail[index] = failState.index;
}
private State nextState(Character character, boolean ignoreRootState) {
State nextState = this.success.get(character);
if (!ignoreRootState && nextState == null && this.depth == 0) {
nextState = this;
}
return nextState;
}
public State nextState(Character character) {
return nextState(character, false);
}
public State nextStateIgnoreRootState(Character character) {
return nextState(character, true);
}
public State addState(Character character) {
State nextState = nextStateIgnoreRootState(character);
if (nextState == null) {
nextState = new State(this.depth + 1);
this.success.put(character, nextState);
}
return nextState;
}
public Collection<State> getStates() {
return this.success.values();
}
public Collection<Character> getTransitions() {
return this.success.keySet();
}
public Map<Character, State> getSuccess() {
return success;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
}

View File

@ -0,0 +1,130 @@
package tw.nekomimi.nekogram.cc
import java.util.*
import kotlin.collections.HashMap
class CCConverter(val target: CCTarget) {
companion object {
val instances = HashMap<CCTarget, CCConverter>()
@JvmStatic
fun get(target: CCTarget): CCConverter {
return instances[target] ?: synchronized(instances) {
instances[target] ?: CCConverter(target).also {
instances[target] = it
}
}
}
}
val tries = LinkedList<AhoCorasickDoubleArrayTrie<String>>()
private fun addTrie(dicts: Array<CCDict>, revDicts: Array<CCDict> = arrayOf()) {
val storage = TreeMap<String, LinkedList<String>>()
for (dictionary in dicts) {
dictionary.postInit()
storage.putAll(dictionary.storage)
}
for (dictionary in revDicts) {
dictionary.postInit()
val revMap = HashMap<String, LinkedList<String>>()
dictionary.storage.forEach { (key, value) ->
value.forEach {
revMap.getOrPut(it) { LinkedList() }.add(key)
}
}
storage.putAll(revMap)
}
tries.add(AhoCorasickDoubleArrayTrie<String>().apply {
build(TreeMap(mapOf(* storage.mapNotNull { it.key to it.value[0] }.toTypedArray())))
})
}
init {
when (target) {
CCTarget.SC -> {
addTrie(arrayOf(
CCDict.JPShinjitaiCharacters,
CCDict.JPVariantsRev
))
addTrie(arrayOf(
CCDict.TSCharacters
))
}
CCTarget.SP -> {
addTrie(arrayOf(
CCDict.JPShinjitaiCharacters,
CCDict.JPShinjitaiPhrases,
CCDict.JPVariantsRev,
CCDict.HKVariantsRev,
CCDict.HKVariantsRevPhrases,
CCDict.TWPhrasesRev,
CCDict.TWVariantsRevPhrases
))
addTrie(arrayOf(
CCDict.TSCharacters,
CCDict.TSPhrases
))
}
CCTarget.TC -> {
addTrie(arrayOf(
CCDict.JPShinjitaiCharacters,
CCDict.JPVariantsRev,
CCDict.STCharacters,
CCDict.STPhrases
))
}
CCTarget.TT -> {
addTrie(arrayOf(
CCDict.JPShinjitaiCharacters,
CCDict.JPShinjitaiPhrases,
CCDict.JPVariantsRev,
CCDict.STCharacters,
CCDict.STPhrases
))
addTrie(arrayOf(
CCDict.TWVariants,
CCDict.TWPhrasesIT,
CCDict.TWPhrasesName,
CCDict.TWPhrasesOther
))
}
CCTarget.HK -> {
addTrie(arrayOf(
CCDict.JPShinjitaiCharacters,
CCDict.JPShinjitaiPhrases,
CCDict.JPVariantsRev,
CCDict.STCharacters,
CCDict.STPhrases
))
addTrie(arrayOf(
CCDict.HKVariants
))
}
CCTarget.JP -> {
addTrie(arrayOf(
CCDict.STCharacters,
CCDict.STPhrases
))
addTrie(arrayOf(
CCDict.JPVariants,
CCDict.JPShinjitaiCharacters,
CCDict.JPShinjitaiPhrases
))
}
}
}
fun convert(input: String): String {
var result = input
for (trie in tries) {
result = OpenCCUtil.segLongest(result.toCharArray(), trie)
}
return result
}
}

View File

@ -0,0 +1,37 @@
package tw.nekomimi.nekogram.cc
import org.telegram.messenger.ApplicationLoader
import java.util.*
import kotlin.collections.HashMap
enum class CCDict {
HKVariantsRevPhrases,
HKVariantsRev,
HKVariants,
JPShinjitaiCharacters,
JPShinjitaiPhrases,
JPVariantsRev,
JPVariants,
STCharacters,
STPhrases,
TSCharacters,
TSPhrases,
TWPhrasesIT,
TWPhrasesName,
TWPhrasesOther,
TWPhrasesRev,
TWVariantsRevPhrases,
TWVariantsRev,
TWVariants;
lateinit var storage: HashMap<String, LinkedList<String>>
fun postInit() {
if (::storage.isInitialized) return
storage = HashMap()
ApplicationLoader.applicationContext.assets.open("dictionary/$name.txt").bufferedReader().forEachLine {
storage[it.substringBefore("\t")] =
LinkedList(it.substringAfter("\t").split(" "))
}
}
}

View File

@ -0,0 +1,5 @@
package tw.nekomimi.nekogram.cc
enum class CCTarget {
SC, SP, TC, TT, HK, JP;
}

View File

@ -0,0 +1,31 @@
@file:Suppress("unused")
package tw.nekomimi.nekogram.cc
object OpenCCUtil {
fun segLongest(charArray: CharArray, trie: AhoCorasickDoubleArrayTrie<String>): String {
val wordNet = arrayOfNulls<String>(charArray.size)
val lengthNet = IntArray(charArray.size)
trie.parseText(charArray) { begin, end, value ->
val length = end - begin
if (length > lengthNet[begin]) {
wordNet[begin] = value
lengthNet[begin] = length
}
}
val sb = StringBuilder(charArray.size)
var offset = 0
while (offset < wordNet.size) {
if (wordNet[offset] == null) {
sb.append(charArray[offset])
++offset
continue
}
sb.append(wordNet[offset])
offset += lengthNet[offset]
}
return sb.toString()
}
}

View File

@ -155,11 +155,11 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
if (parentActivity != null && !canceled.get()) {
AlertUtil.showTransFailedDialog(parentActivity, it is UnsupportedOperationException, it.message
?: it.javaClass.simpleName, Runnable {
?: it.javaClass.simpleName) {
translateMessages(messages, target)
})
}
}
@ -192,11 +192,11 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
if (parentActivity != null && !canceled.get()) {
AlertUtil.showTransFailedDialog(parentActivity, e is UnsupportedOperationException, e.message
?: e.javaClass.simpleName, Runnable {
?: e.javaClass.simpleName) {
translateMessages(messages, target)
})
}
}
@ -229,11 +229,11 @@ fun ChatActivity.translateMessages(messages: Array<MessageObject>, target: Local
if (parentActivity != null && !canceled.get()) {
AlertUtil.showTransFailedDialog(parentActivity, it is UnsupportedOperationException, it.message
?: it.javaClass.simpleName, Runnable {
?: it.javaClass.simpleName) {
translateMessages(messages, target)
})
}
}

View File

@ -967,7 +967,6 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
} else if (position == appBarShadowRow) {
textCell.setTextAndCheck(LocaleController.getString("DisableAppBarShadow", R.string.DisableAppBarShadow), NekoConfig.disableAppBarShadow, eventTypeRow != -1);
} else if (position == usePersianCalenderRow) {
textCell.setTextAndCheck(LocaleController.getString("UsePersianCalender", R.string.UsePersianCalender), false, false);
} else if (position == autoPauseVideoRow) {
textCell.setTextAndValueAndCheck(LocaleController.getString("AutoPauseVideo", R.string.AutoPauseVideo), LocaleController.getString("AutoPauseVideoAbout", R.string.AutoPauseVideoAbout), NekoConfig.autoPauseVideo, true, true);
}

View File

@ -0,0 +1,38 @@
package tw.nekomimi.nekogram.transtale;
import org.dizitart.no2.Document;
import org.dizitart.no2.mapper.Mappable;
import org.dizitart.no2.mapper.NitriteMapper;
import org.dizitart.no2.objects.Id;
import org.dizitart.no2.objects.Index;
@Index("chatId")
public class ChatCCTarget implements Mappable {
@Id
public int chatId;
public String ccTarget;
public ChatCCTarget() {
}
public ChatCCTarget(int chatId, String ccTarget) {
this.chatId = chatId;
this.ccTarget = ccTarget;
}
@Override
public Document write(NitriteMapper mapper) {
Document document = new Document();
document.put("chatId", chatId);
document.put("ccTarget", ccTarget);
return document;
}
@Override
public void read(NitriteMapper mapper, Document document) {
chatId = ((int) document.get("chatId"));
ccTarget = ((String) document.get("ccTarget"));
}
}

View File

@ -19,26 +19,49 @@ class TranslateDb(val code: String) {
val repo = HashMap<Locale, TranslateDb>()
val chat = db.getRepository("chat", ChatLanguage::class.java)
val ccTarget = db.getRepository("opencc", ChatCCTarget::class.java)
@JvmStatic fun getChatLanguage(chatId: Int, default: Locale): Locale {
return chat.find(ObjectFilters.eq("chatId", chatId)).firstOrDefault()?.language?.code2Locale ?: default
return chat.find(ObjectFilters.eq("chatId", chatId)).firstOrDefault()?.language?.code2Locale
?: default
}
@JvmStatic fun saveChatLanguage(chatId: Int, locale: Locale) = UIUtil.runOnIoDispatcher {
@JvmStatic
fun saveChatLanguage(chatId: Int, locale: Locale) = UIUtil.runOnIoDispatcher {
chat.update(ChatLanguage(chatId, locale.locale2code), true)
}
@JvmStatic fun currentTarget() = NekoConfig.translateToLang?.transDbByCode ?: LocaleController.getInstance().currentLocale.transDb
@JvmStatic
fun getChatCCTarget(chatId: Int, default: String?): String? {
@JvmStatic fun forLocale(locale: Locale) = locale.transDb
return ccTarget.find(ObjectFilters.eq("chatId", chatId)).firstOrDefault()?.ccTarget
?: default
@JvmStatic fun currentInputTarget() = NekoConfig.translateInputLang.transDbByCode
}
@JvmStatic fun clearAll() {
@JvmStatic
fun saveChatCCTarget(chatId: Int, target: String) = UIUtil.runOnIoDispatcher {
ccTarget.update(ChatCCTarget(chatId, target), true)
}
@JvmStatic
fun currentTarget() = NekoConfig.translateToLang?.transDbByCode
?: LocaleController.getInstance().currentLocale.transDb
@JvmStatic
fun forLocale(locale: Locale) = locale.transDb
@JvmStatic
fun currentInputTarget() = NekoConfig.translateInputLang.transDbByCode
@JvmStatic
fun clearAll() {
db.listRepositories()
.filter { it != "chat" }

View File

@ -8,6 +8,7 @@ import org.telegram.messenger.LocaleController
import org.telegram.messenger.R
import tw.nekomimi.nekogram.NekoConfig
import tw.nekomimi.nekogram.PopupBuilder
import tw.nekomimi.nekogram.cc.CCTarget
import tw.nekomimi.nekogram.transtale.source.GoogleAppTranslator
import tw.nekomimi.nekogram.transtale.source.LingoTranslator
import tw.nekomimi.nekogram.transtale.source.YandexTranslator
@ -98,7 +99,9 @@ interface Translator {
}
@JvmStatic @JvmOverloads fun showTargetLangSelect(anchor: View, input: Boolean = false, full: Boolean = false, callback: (Locale) -> Unit) {
@JvmStatic
@JvmOverloads
fun showTargetLangSelect(anchor: View, input: Boolean = false, full: Boolean = false, callback: (Locale) -> Unit) {
val builder = PopupBuilder(anchor)
@ -168,9 +171,39 @@ interface Translator {
}
@JvmStatic
fun showCCTargetSelect(anchor: View, callback: (String) -> Unit) {
val builder = PopupBuilder(anchor)
builder.setItems(arrayOf(
LocaleController.getString("CCNo", R.string.CCNo),
LocaleController.getString("CCSC", R.string.CCSC),
LocaleController.getString("CCSP", R.string.CCSP),
LocaleController.getString("CCTC", R.string.CCTC),
LocaleController.getString("CCHK", R.string.CCHK),
LocaleController.getString("CCTT", R.string.CCTT),
LocaleController.getString("CCJP", R.string.CCJP)
)) { index: Int, _ ->
callback(when (index) {
1 -> CCTarget.SC.name
2 -> CCTarget.SP.name
3 -> CCTarget.TC.name
4 -> CCTarget.HK.name
5 -> CCTarget.TT.name
6 -> CCTarget.JP.name
else -> ""
})
}
builder.show()
}
@JvmStatic
@JvmOverloads
fun translate(to: Locale = NekoConfig.translateToLang?.code2Locale ?: LocaleController.getInstance().currentLocale, query: String, translateCallBack: TranslateCallBack) {
fun translate(to: Locale = NekoConfig.translateToLang?.code2Locale
?: LocaleController.getInstance().currentLocale, query: String, translateCallBack: TranslateCallBack) {
UIUtil.runOnIoDispatcher {
@ -186,7 +219,8 @@ interface Translator {
}.onFailure {
translateCallBack.onFailed(it is UnsupportedOperationException, it.message ?: it.javaClass.simpleName)
translateCallBack.onFailed(it is UnsupportedOperationException, it.message
?: it.javaClass.simpleName)
}

View File

@ -230,8 +230,6 @@
<string name="NekoXFaq">NekoX FAQ</string>
<string name="TransSite">Translate Platform</string>
<string name="UsePersianCalender">Use Persian Calender</string>
<string name="OpenKayChain">OpenPGP Client</string>
<string name="OpenPGPApp">OpenPGP Provider</string>
<string name="OpenPGPKey">OpenPGP Key</string>
@ -261,4 +259,15 @@
<string name="FCTitle">About application updates</string>
<string name="FCInfo">Follow our announcements and updates channel?</string>
<string name="OpenCC" translatable="false">OpenCC</string>
<string name="CCTitle">OpenCC (Chinese Convert)</string>
<string name="CCTarget">Target</string>
<string name="CCNo">None</string>
<string name="CCTC">Traditional Chinese</string>
<string name="CCHK">Traditional Chinese (Hong Kong)</string>
<string name="CCTT">Traditional Chinese (Taiwan)</string>
<string name="CCSC">Simplified Chinese</string>
<string name="CCSP">Simplified Chinese (China)</string>
<string name="CCJP">New Japanese Kanji (Shinjitai)</string>
</resources>

View File

@ -0,0 +1,22 @@
package tw.nekomimi.nekogram.cc
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
@RunWith(RobolectricTestRunner::class)
class OpenCCTest {
@Test
fun ccTest() {
val example = "你好, 开放中文转换!"
for (target in CCTarget.values()) {
print(target.name + ": ")
println(CCConverter(target).convert(example))
}
}
}