update lang

This commit is contained in:
Km.Van
2026-07-10 22:57:56 +08:00
parent ee3bbc55fd
commit 82f1d51a39
12 changed files with 2677 additions and 287 deletions
BIN
View File
Binary file not shown.
+58 -48
View File
@@ -2,15 +2,15 @@ msgid ""
msgstr ""
"Project-Id-Version: X-Prober\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-09-05 08:46+0800\n"
"Last-Translator: Km.Van <kmvan.com@gmail.com>\n"
"PO-Revision-Date: 2026-07-10 21:38+0800\n"
"Last-Translator: Km.Van <kmvan@outlook.com>\n"
"Language-Team: Km.Van <inn-studio.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.7\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: gettext\n"
@@ -18,6 +18,9 @@ msgstr ""
msgid "Failed to fetch data. Please try again later."
msgstr "データの取得に失敗しました。しばらくしてからもう一度お試しください。"
msgid "Network error. Please check your connection."
msgstr "ネットワークエラー。接続を確認してください。"
msgid "Touch to copy marks"
msgstr "タップでスコアをコピー"
@@ -47,12 +50,6 @@ msgstr "ブラウザのベンチマーク"
msgid "Browser bench"
msgstr "ブラウザベンチ"
msgid "Dark"
msgstr "ダークモード"
msgid "Default"
msgstr "デフォルト"
msgid "Database"
msgstr "データベース"
@@ -107,12 +104,6 @@ msgstr "マイデータ"
msgid "Network Stats"
msgstr "ネットワーク統計"
msgid "Recived: {{total}}"
msgstr "受信: {{total}}"
msgid "Sent: {{total}}"
msgstr "送信: {{total}}"
msgid "Network"
msgstr "ネットワーク"
@@ -232,15 +223,12 @@ msgstr ""
"異なるバージョン間の比較は不可。タイムサーバーの負荷状態により結果が変動しま"
"す(参考値)"
msgid "Testing, please wait..."
msgstr "テスト実行中..."
msgid "Please wait {{seconds}}s"
msgstr "{{seconds}}秒お待ちください"
msgid "Network error, please try again later."
msgstr "ネットワークエラー。後ほど再試行してください。"
msgid "Please wait {{seconds}}s"
msgstr "{{seconds}}秒お待ちください"
msgid "Benchmark my server"
msgstr "ベンチマーク実行"
@@ -335,28 +323,9 @@ msgstr ""
msgid "Memory cached"
msgstr "キャッシュメモリ"
msgid ""
"Cached memory is memory that Linux uses for disk caching. However, this does "
"not count as \"used\" memory, since it will be freed when applications "
"require it. Hence you do not have to worry if a large amount is being used."
msgstr ""
"キャッシュメモリはディスクキャッシュ用に確保された領域です。アプリケーション"
"が必要時に解放されるため「使用中」メモリにはカウントされず、使用量が多くても"
"問題ありません。"
msgid "Memory real usage"
msgstr "実メモリ使用量"
msgid ""
"Linux comes with many commands to check memory usage. The \"free\" command "
"usually displays the total amount of free and used physical and swap memory "
"in the system, as well as the buffers used by the kernel. The \"top\" "
"command provides a dynamic real-time view of a running system."
msgstr ""
"Linuxにはメモリ使用量確認コマンドが複数存在します。「free」コマンドは物理メモ"
"リ/スワップの使用状況とカーネルバッファを表示し、「top」コマンドはシステムの"
"リアルタイム状態を動的に表示します。"
msgid "Swap cached"
msgstr "スワップキャッシュ"
@@ -381,18 +350,15 @@ msgstr "{{sensor}} 温度"
msgid "Temperature"
msgstr "温度"
msgid "LiangYe"
msgstr "良夜"
msgid "XiGuang"
msgstr "曦光"
msgid "Click to close"
msgstr "クリックで閉じる"
msgid "⏳ Updating, please wait a second..."
msgstr "⏳ 更新中..."
msgid "❌ Update error, click here to try again?"
msgstr "❌ 更新エラー [再試行]"
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr "✨ 新版検出: {{oldVersion}} → {{newVersion}}"
msgid "Update success, refreshing..."
msgstr "更新成功 再読込中..."
@@ -405,6 +371,15 @@ msgstr "ファイル更新失敗 サーバーの権限/空き容量を確認し
msgid "Click to update"
msgstr "クリックで更新"
msgid "⏳ Updating, please wait a second..."
msgstr "⏳ 更新中..."
msgid "❌ Update error, click here to try again?"
msgstr "❌ 更新エラー [再試行]"
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr "✨ 新版検出: {{oldVersion}} → {{newVersion}}"
msgid "Loading..."
msgstr "読込中..."
@@ -414,6 +389,41 @@ msgstr "非対応"
msgid "Can not fetch IP"
msgstr "IP取得失敗"
#~ msgid "Dark"
#~ msgstr "ダークモード"
#~ msgid "Default"
#~ msgstr "デフォルト"
#~ msgid "Recived: {{total}}"
#~ msgstr "受信: {{total}}"
#~ msgid "Sent: {{total}}"
#~ msgstr "送信: {{total}}"
#~ msgid "Testing, please wait..."
#~ msgstr "テスト実行中..."
#~ msgid ""
#~ "Cached memory is memory that Linux uses for disk caching. However, this "
#~ "does not count as \"used\" memory, since it will be freed when "
#~ "applications require it. Hence you do not have to worry if a large amount "
#~ "is being used."
#~ msgstr ""
#~ "キャッシュメモリはディスクキャッシュ用に確保された領域です。アプリケーショ"
#~ "ンが必要時に解放されるため「使用中」メモリにはカウントされず、使用量が多く"
#~ "ても問題ありません。"
#~ msgid ""
#~ "Linux comes with many commands to check memory usage. The \"free\" "
#~ "command usually displays the total amount of free and used physical and "
#~ "swap memory in the system, as well as the buffers used by the kernel. The "
#~ "\"top\" command provides a dynamic real-time view of a running system."
#~ msgstr ""
#~ "Linuxにはメモリ使用量確認コマンドが複数存在します。「free」コマンドは物理"
#~ "メモリ/スワップの使用状況とカーネルバッファを表示し、「top」コマンドはシス"
#~ "テムのリアルタイム状態を動的に表示します。"
#~ msgid "Benchmark"
#~ msgstr "性能測定"
+19 -25
View File
@@ -18,6 +18,9 @@ msgstr ""
msgid "Failed to fetch data. Please try again later."
msgstr ""
msgid "Network error. Please check your connection."
msgstr ""
msgid "Touch to copy marks"
msgstr ""
@@ -39,12 +42,6 @@ msgstr ""
msgid "Browser bench"
msgstr ""
msgid "Dark"
msgstr ""
msgid "Default"
msgstr ""
msgid "Database"
msgstr ""
@@ -219,15 +216,12 @@ msgstr ""
msgid "Different versions cannot be compared, and different time servers have different loads, just for reference."
msgstr ""
msgid "Testing, please wait..."
msgid "Please wait {{seconds}}s"
msgstr ""
msgid "Network error, please try again later."
msgstr ""
msgid "Please wait {{seconds}}s"
msgstr ""
msgid "Benchmark my server"
msgstr ""
@@ -312,15 +306,9 @@ msgstr ""
msgid "Memory cached"
msgstr ""
msgid "Cached memory is memory that Linux uses for disk caching. However, this does not count as \"used\" memory, since it will be freed when applications require it. Hence you do not have to worry if a large amount is being used."
msgstr ""
msgid "Memory real usage"
msgstr ""
msgid "Linux comes with many commands to check memory usage. The \"free\" command usually displays the total amount of free and used physical and swap memory in the system, as well as the buffers used by the kernel. The \"top\" command provides a dynamic real-time view of a running system."
msgstr ""
msgid "Swap cached"
msgstr ""
@@ -345,18 +333,15 @@ msgstr ""
msgid "Temperature"
msgstr ""
msgid "LiangYe"
msgstr ""
msgid "XiGuang"
msgstr ""
msgid "Click to close"
msgstr ""
msgid "⏳ Updating, please wait a second..."
msgstr ""
msgid "❌ Update error, click here to try again?"
msgstr ""
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr ""
msgid "Update success, refreshing..."
msgstr ""
@@ -369,6 +354,15 @@ msgstr ""
msgid "Click to update"
msgstr ""
msgid "⏳ Updating, please wait a second..."
msgstr ""
msgid "❌ Update error, click here to try again?"
msgstr ""
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr ""
msgid "Loading..."
msgstr ""
BIN
View File
Binary file not shown.
+2458 -46
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+56 -46
View File
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: X-Prober\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-09-05 08:47+0800\n"
"Last-Translator: Km.Van <kmvan.com@gmail.com>\n"
"PO-Revision-Date: 2026-07-10 21:36+0800\n"
"Last-Translator: Km.Van <kmvan@outlook.com>\n"
"Language-Team: Km.Van <inn-studio.com>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -14,7 +14,7 @@ msgstr ""
"X-Poedit-KeywordsList: gettext\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.7\n"
"X-ZhConverter: 繁化姬 dict-b76338ce-r665 @ 2019/11/20 14:24:08 | https://"
"zhconvert.org\n"
"X-Poedit-Flags-xgettext: --add-comments\n"
@@ -22,6 +22,9 @@ msgstr ""
msgid "Failed to fetch data. Please try again later."
msgstr "無法獲取資料,請稍後重試。"
msgid "Network error. Please check your connection."
msgstr "網路錯誤,請檢查您與服務器的網路。"
msgid "Touch to copy marks"
msgstr "點擊複製跑分數據"
@@ -47,12 +50,6 @@ msgstr "測試我的瀏覽器"
msgid "Browser bench"
msgstr "瀏覽器跑分"
msgid "Dark"
msgstr "深色模式"
msgid "Default"
msgstr "預設"
msgid "Database"
msgstr "資料庫"
@@ -107,12 +104,6 @@ msgstr "我的"
msgid "Network Stats"
msgstr "網路統計"
msgid "Recived: {{total}}"
msgstr "接收: {{total}}"
msgid "Sent: {{total}}"
msgstr "傳送: {{total}}"
msgid "Network"
msgstr "網路"
@@ -230,15 +221,12 @@ msgid ""
"different loads, just for reference."
msgstr "不同版本無法直接比較,且不同時間伺服器負載各異,結果僅供參考。"
msgid "Testing, please wait..."
msgstr "測試中,請稍候..."
msgid "Please wait {{seconds}}s"
msgstr "請等候 {{seconds}} 秒"
msgid "Network error, please try again later."
msgstr "網路錯誤,請稍後重試。"
msgid "Please wait {{seconds}}s"
msgstr "請等候 {{seconds}} 秒"
msgid "Benchmark my server"
msgstr "測試我的伺服器"
@@ -330,26 +318,9 @@ msgstr ""
msgid "Memory cached"
msgstr "記憶體快取"
msgid ""
"Cached memory is memory that Linux uses for disk caching. However, this does "
"not count as \"used\" memory, since it will be freed when applications "
"require it. Hence you do not have to worry if a large amount is being used."
msgstr ""
"快取記憶體是 Linux 用於磁碟快取的空間,不計入「已用」記憶體,因應用程式需要時"
"會自動釋放。故即使使用量較大亦無需擔心。"
msgid "Memory real usage"
msgstr "實際記憶體用量"
msgid ""
"Linux comes with many commands to check memory usage. The \"free\" command "
"usually displays the total amount of free and used physical and swap memory "
"in the system, as well as the buffers used by the kernel. The \"top\" "
"command provides a dynamic real-time view of a running system."
msgstr ""
"Linux 提供多種記憶體檢測指令:「free」指令顯示系統實體記憶體及交換區的總用量"
"與緩衝區使用情況;「top」指令則提供運行中系統的即時動態檢視。"
msgid "Swap cached"
msgstr "交換區快取"
@@ -374,18 +345,15 @@ msgstr "{{sensor}} 溫度"
msgid "Temperature"
msgstr "溫度"
msgid "LiangYe"
msgstr "良夜"
msgid "XiGuang"
msgstr "曦光"
msgid "Click to close"
msgstr "點擊關閉"
msgid "⏳ Updating, please wait a second..."
msgstr "⏳ 更新中,請稍候..."
msgid "❌ Update error, click here to try again?"
msgstr "❌ 更新錯誤,點此重試?"
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr "✨ 發現新版本:{{oldVersion}} → {{newVersion}}"
msgid "Update success, refreshing..."
msgstr "更新成功,重新整理中..."
@@ -398,6 +366,15 @@ msgstr "無法更新檔案,請檢查伺服器權限及空間。"
msgid "Click to update"
msgstr "點擊更新"
msgid "⏳ Updating, please wait a second..."
msgstr "⏳ 更新中,請稍候..."
msgid "❌ Update error, click here to try again?"
msgstr "❌ 更新錯誤,點此重試?"
msgid "✨ Found new version: {{oldVersion}} ⇢ {{newVersion}}"
msgstr "✨ 發現新版本:{{oldVersion}} → {{newVersion}}"
msgid "Loading..."
msgstr "載入中..."
@@ -407,6 +384,39 @@ msgstr "不支援"
msgid "Can not fetch IP"
msgstr "無法取得 IP"
#~ msgid "Dark"
#~ msgstr "深色模式"
#~ msgid "Default"
#~ msgstr "預設"
#~ msgid "Recived: {{total}}"
#~ msgstr "接收: {{total}}"
#~ msgid "Sent: {{total}}"
#~ msgstr "傳送: {{total}}"
#~ msgid "Testing, please wait..."
#~ msgstr "測試中,請稍候..."
#~ msgid ""
#~ "Cached memory is memory that Linux uses for disk caching. However, this "
#~ "does not count as \"used\" memory, since it will be freed when "
#~ "applications require it. Hence you do not have to worry if a large amount "
#~ "is being used."
#~ msgstr ""
#~ "快取記憶體是 Linux 用於磁碟快取的空間,不計入「已用」記憶體,因應用程式需"
#~ "要時會自動釋放。故即使使用量較大亦無需擔心。"
#~ msgid ""
#~ "Linux comes with many commands to check memory usage. The \"free\" "
#~ "command usually displays the total amount of free and used physical and "
#~ "swap memory in the system, as well as the buffers used by the kernel. The "
#~ "\"top\" command provides a dynamic real-time view of a running system."
#~ msgstr ""
#~ "Linux 提供多種記憶體檢測指令:「free」指令顯示系統實體記憶體及交換區的總用"
#~ "量與緩衝區使用情況;「top」指令則提供運行中系統的即時動態檢視。"
#~ msgid "Benchmark"
#~ msgstr "跑分測試"
+29 -39
View File
@@ -1,10 +1,10 @@
{
"": {
"ja": "Project-Id-Version: X-Prober\nPOT-Creation-Date: \nPO-Revision-Date: 2025-09-05 08:46+0800\nLast-Translator: Km.Van <kmvan.com@gmail.com>\nLanguage-Team: Km.Van <inn-studio.com>\nLanguage: ja\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=1; plural=0;\nX-Generator: Poedit 3.4.2\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Poedit-KeywordsList: gettext\n",
"zh": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2025-09-04 22:51+0800\nLast-Translator: Km.Van <kmvan.com@gmail.com>\nLanguage-Team: kmvan <kmvan.com@gmail.com>\nLanguage: zh_CN\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.4.2\nX-Poedit-Flags-xgettext: --add-comments\n",
"zhcn": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2025-09-04 22:51+0800\nLast-Translator: Km.Van <kmvan.com@gmail.com>\nLanguage-Team: kmvan <kmvan.com@gmail.com>\nLanguage: zh_CN\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.4.2\nX-Poedit-Flags-xgettext: --add-comments\n",
"ja": "Project-Id-Version: X-Prober\nPOT-Creation-Date: \nPO-Revision-Date: 2026-07-10 21:38+0800\nLast-Translator: Km.Van <kmvan@outlook.com>\nLanguage-Team: Km.Van <inn-studio.com>\nLanguage: ja\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=1; plural=0;\nX-Generator: Poedit 3.7\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Poedit-KeywordsList: gettext\n",
"zh": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2026-07-10 21:34+0800\nLast-Translator: Km.Van <kmvan@outlook.com>\nLanguage-Team: kmvan <kmvan.com@gmail.com>\nLanguage: zh_CN\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.7\nX-Poedit-Flags-xgettext: --add-comments\n",
"zhcn": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2026-07-10 21:34+0800\nLast-Translator: Km.Van <kmvan@outlook.com>\nLanguage-Team: kmvan <kmvan.com@gmail.com>\nLanguage: zh_CN\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.7\nX-Poedit-Flags-xgettext: --add-comments\n",
"zhhk": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2025-09-04 22:53+0800\nLast-Translator: Km.Van <kmvan.com@gmail.com>\nLanguage-Team: Km.Van <inn-studio.com>\nLanguage: zh_HK\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.4.2\nX-Poedit-Flags-xgettext: --add-comments\n",
"zhtw": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2025-09-05 08:47+0800\nLast-Translator: Km.Van <kmvan.com@gmail.com>\nLanguage-Team: Km.Van <inn-studio.com>\nLanguage: zh_TW\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.4.2\nX-ZhConverter: 繁化姬 dict-b76338ce-r665 @ 2019/11/20 14:24:08 | https://zhconvert.org\nX-Poedit-Flags-xgettext: --add-comments\n"
"zhtw": "Project-Id-Version: X-Prober\nReport-Msgid-Bugs-To: \nPOT-Creation-Date: \nPO-Revision-Date: 2026-07-10 21:36+0800\nLast-Translator: Km.Van <kmvan@outlook.com>\nLanguage-Team: Km.Van <inn-studio.com>\nLanguage: zh_TW\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nPlural-Forms: nplurals=2; plural=n != 1;\nX-Poedit-KeywordsList: gettext\nX-Poedit-Basepath: .\nX-Poedit-SourceCharset: UTF-8\nX-Generator: Poedit 3.7\nX-ZhConverter: 繁化姬 dict-b76338ce-r665 @ 2019/11/20 14:24:08 | https://zhconvert.org\nX-Poedit-Flags-xgettext: --add-comments\n"
},
"{{days}}d {{hours}}h {{mins}}min {{secs}}s": {
"ja": "{{days}}日 {{hours}}時間 {{mins}}分 {{secs}}秒",
@@ -112,11 +112,7 @@
"zhtw": "緩衝區是記憶體中的區塊 I/O 緩衝,生命週期較短。在 Linux 核心 2.4 版之前,頁面快取和緩衝區快取是分開的。自 2.4 版起,兩者已統一,緩衝區代表未存入頁面快取的原始磁碟區塊(即非檔案資料)。"
},
"Cached memory is memory that Linux uses for disk caching. However, this does not count as \"used\" memory, since it will be freed when applications require it. Hence you do not have to worry if a large amount is being used.": {
"ja": "キャッシュメモリはディスクキャッシュ用に確保された領域です。アプリケーションが必要時に解放されるため「使用中」メモリにはカウントされず、使用量が多くても問題ありません。",
"zh": "缓存内存是 Linux 用于磁盘缓存的内存空间,不计入“已用”内存,因为应用程序需要时会自动释放。因此即使使用量较大也无需担心。",
"zhcn": "缓存内存是 Linux 用于磁盘缓存的内存空间,不计入“已用”内存,因为应用程序需要时会自动释放。因此即使使用量较大也无需担心。",
"zhhk": "快取記憶體是 Linux 用於磁碟快取的空間,不計入「已用」記憶體,因應用程式需要時會自動釋放。故即使使用量較大亦無需擔心。",
"zhtw": "快取記憶體是 Linux 用於磁碟快取的空間,不計入「已用」記憶體,因應用程式需要時會自動釋放。故即使使用量較大亦無需擔心。"
"zhhk": "快取記憶體是 Linux 用於磁碟快取的空間,不計入「已用」記憶體,因應用程式需要時會自動釋放。故即使使用量較大亦無需擔心。"
},
"Can not fetch IP": {
"ja": "IP取得失敗",
@@ -189,11 +185,7 @@
"zhtw": "CPU 使用率"
},
"Dark": {
"ja": "ダークモード",
"zh": "深色模式",
"zhcn": "深色模式",
"zhhk": "暗黑模式",
"zhtw": "深色模式"
"zhhk": "暗黑模式"
},
"Database": {
"ja": "データベース",
@@ -210,11 +202,7 @@
"zhtw": "資料庫"
},
"Default": {
"ja": "デフォルト",
"zh": "默认",
"zhcn": "默认",
"zhhk": "預設",
"zhtw": "預設"
"zhhk": "預設"
},
"Detail": {
"ja": "詳細",
@@ -342,12 +330,14 @@
"zhhk": "JS 瀏覽器語言",
"zhtw": "JS瀏覽器語言"
},
"LiangYe": {
"ja": "良夜",
"zh": "良夜",
"zhcn": "良夜",
"zhtw": "良夜"
},
"Linux comes with many commands to check memory usage. The \"free\" command usually displays the total amount of free and used physical and swap memory in the system, as well as the buffers used by the kernel. The \"top\" command provides a dynamic real-time view of a running system.": {
"ja": "Linuxにはメモリ使用量確認コマンドが複数存在します。「free」コマンドは物理メモリ/スワップの使用状況とカーネルバッファを表示し、「top」コマンドはシステムのリアルタイム状態を動的に表示します。",
"zh": "Linux 提供多种内存检测命令:“free”命令显示系统物理内存和交换空间的总用量及内核缓冲区;“top”命令提供运行中系统的实时动态视图。",
"zhcn": "Linux 提供多种内存检测命令:“free”命令显示系统物理内存和交换空间的总用量及内核缓冲区;“top”命令提供运行中系统的实时动态视图。",
"zhhk": "Linux 提供多種記憶體檢測指令:「free」指令顯示系統實體記憶體及交換區的總用量與緩衝區使用情況;「top」指令則提供運行中系統的即時動態檢視。",
"zhtw": "Linux 提供多種記憶體檢測指令:「free」指令顯示系統實體記憶體及交換區的總用量與緩衝區使用情況;「top」指令則提供運行中系統的即時動態檢視。"
"zhhk": "Linux 提供多種記憶體檢測指令:「free」指令顯示系統實體記憶體及交換區的總用量與緩衝區使用情況;「top」指令則提供運行中系統的即時動態檢視。"
},
"Loaded extensions": {
"ja": "ロード済み拡張機能",
@@ -489,6 +479,12 @@
"zhhk": "網絡錯誤,請稍後重試。",
"zhtw": "網路錯誤,請稍後重試。"
},
"Network error. Please check your connection.": {
"ja": "ネットワークエラー。接続を確認してください。",
"zh": "网络错误,请检查您与服务器的网络。",
"zhcn": "网络错误,请检查您与服务器的网络。",
"zhtw": "網路錯誤,請檢查您與服務器的網路。"
},
"Network Stats": {
"ja": "ネットワーク統計",
"zh": "网络统计",
@@ -609,11 +605,7 @@
"zhtw": "讀取"
},
"Recived: {{total}}": {
"ja": "受信: {{total}}",
"zh": "接收: {{total}}",
"zhcn": "接收: {{total}}",
"zhhk": "接收: {{total}}",
"zhtw": "接收: {{total}}"
"zhhk": "接收: {{total}}"
},
"Results": {
"ja": "診断結果",
@@ -644,11 +636,7 @@
"zhtw": "腳本路徑"
},
"Sent: {{total}}": {
"ja": "送: {{total}}",
"zh": "发送: {{total}}",
"zhcn": "发送: {{total}}",
"zhhk": "傳送: {{total}}",
"zhtw": "傳送: {{total}}"
"zhhk": "送: {{total}}"
},
"Server ⇄ Browser": {
"ja": "サーバー ⇄ ブラウザー",
@@ -749,11 +737,7 @@
"zhtw": "溫度感測器"
},
"Testing, please wait...": {
"ja": "テスト実行中...",
"zh": "测试中,请稍候...",
"zhcn": "测试中,请稍候...",
"zhhk": "測試中,請稍候...",
"zhtw": "測試中,請稍候..."
"zhhk": "測試中,請稍候..."
},
"Time": {
"ja": "時間",
@@ -852,5 +836,11 @@
"zhcn": "写入",
"zhhk": "寫入",
"zhtw": "寫入"
},
"XiGuang": {
"ja": "曦光",
"zh": "曦光",
"zhcn": "曦光",
"zhtw": "曦光"
}
}
+22 -24
View File
@@ -1,30 +1,28 @@
/**
* @version 1.0.0
* @version 1.0.1
*/
import { writeFileSync } from 'node:fs';
import path, { basename, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import DeepSort from 'deep-sort-object';
import FastGlob from 'fast-glob';
import { PoParser } from './po-parser.mjs';
import { PotBuilder } from './pot-builder.mjs';
import { writeFileSync } from "node:fs";
import { glob } from "node:fs/promises";
import path, { basename, dirname } from "node:path";
import { fileURLToPath } from "node:url";
import DeepSort from "deep-sort-object";
import { PoParser } from "./po-parser.mjs";
import { PotBuilder } from "./pot-builder.mjs";
const __dirname = dirname(fileURLToPath(import.meta.url));
class LangBuilder {
data = {};
constructor() {
this.build();
}
setData = async () => {
async setData() {
new PotBuilder({
potPath: path.resolve(__dirname, '../locales/lang.pot'),
sourceDir: path.resolve(__dirname, '../src'),
});
const files = await FastGlob(path.resolve(__dirname, '../locales/*.po'));
for (const file of files) {
const lang = basename(file, '.po');
const langId = lang.replace('_', '').toLowerCase();
potPath: path.resolve(__dirname, "../locales/lang.pot"),
sourceDir: path.resolve(__dirname, "../src"),
}).build();
for await (const entry of await glob(
path.resolve(__dirname, "../locales/*.po")
)) {
const lang = basename(entry, ".po");
const langId = lang.replace("_", "").toLowerCase();
const parser = new PoParser({
poPath: path.resolve(__dirname, `../locales/${lang}.po`),
});
@@ -38,15 +36,15 @@ class LangBuilder {
}
}
}
};
build = async () => {
}
async build() {
await this.setData();
this.data = DeepSort(this.data);
const jsonPath = path.resolve(
__dirname,
'../src/Components/Language/data.json'
"../src/Components/Language/data.json"
);
writeFileSync(jsonPath, JSON.stringify(this.data, null, 2));
};
}
}
new LangBuilder();
new LangBuilder().build();
+9 -11
View File
@@ -1,14 +1,12 @@
/**
* @version 1.0.1
* @version 1.0.2
*/
import { existsSync, readFileSync } from 'node:fs';
import gettextParser from 'gettext-parser';
import { existsSync, readFileSync } from "node:fs";
import gettextParser from "gettext-parser";
const PARSE_REGEX =
/(msgctxt\s+"(.+?)"\s+)?msgid\s+"(.+?)"\s+msgstr\s+"(.+?)"/gm;
export class PoParser {
poPath = '';
poPath = "";
items = {};
constructor({ poPath }) {
this.poPath = poPath;
@@ -16,15 +14,15 @@ export class PoParser {
throw new Error(`${this.poPath} not exists`);
}
}
parse = () => {
parse() {
const input = readFileSync(this.poPath);
const po = gettextParser.po.parse(input);
for (const group of Object.values(po.translations)) {
for (const item of Object.values(group)) {
const id = item.msgid;
const str = item.msgstr[0];
const ctxt = item?.msgctxt || '';
const key = ctxt !== '' ? `${ctxt}|${id}` : id;
const [str] = item.msgstr;
const ctxt = item?.msgctxt || "";
const key = ctxt === "" ? id : `${ctxt}|${id}`;
this.items[key] = str;
}
}
@@ -35,5 +33,5 @@ export class PoParser {
return r;
}, {});
return this.items;
};
}
}
+26 -21
View File
@@ -1,11 +1,13 @@
/**
* @version 1.0.1
*/
import { lstatSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
import { extname } from 'node:path';
import { lstatSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
import { extname } from "node:path";
const GETTEXT_REG = /gettext\s*\(\s*(".+?")\s*,*\s*(".+?")*\s*\)/gm;
export class PotBuilder {
potPath = '';
sourceDir = '';
potPath = "";
sourceDir = "";
entries = {};
/**
* @type {string[]}
@@ -14,30 +16,33 @@ export class PotBuilder {
constructor({ potPath, sourceDir }) {
this.potPath = potPath;
this.sourceDir = sourceDir;
}
build() {
this.fetchDirOrFile(this.sourceDir);
this.filePaths.map(this.buildEntries);
for (const path of this.filePaths) {
this.buildEntries(path);
}
this.buildPotFile();
}
buildEntries = (path) => {
buildEntries(path) {
const code = readFileSync(path).toString();
const reg = /gettext\s*\(\s*('.+?')\s*,*\s*('.+?')*\s*\)/gm;
const matches = code.matchAll(reg);
const matches = code.matchAll(GETTEXT_REG);
if (matches) {
for (const match of matches) {
const msgid = match[1].slice(1, -1);
const msgctxt = (match[2] || '').slice(1, -1);
const msgctxt = (match[2] || "").slice(1, -1);
if (this.entries[`${msgid}${msgctxt}`]) {
continue;
}
this.entries[`${msgid}${msgctxt}`] = `
${msgctxt ? `msgctxt ${JSON.stringify(msgctxt)}` : ''}
${msgctxt ? `msgctxt ${JSON.stringify(msgctxt)}` : ""}
msgid ${JSON.stringify(msgid)}
msgstr ""
`.trim();
}
}
};
buildPotFile = () => {
}
buildPotFile() {
const toWriteData = `
#, fuzzy
msgid ""
@@ -56,17 +61,17 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\\n"
"X-Poedit-KeywordsList: gettext\\n"
${Object.values(this.entries).join('\n\n')}
${Object.values(this.entries).join("\n\n")}
`.trim();
writeFileSync(this.potPath, toWriteData, 'utf8');
};
fetchDirOrFile = (filePathOrDir) => {
writeFileSync(this.potPath, toWriteData, "utf8");
}
fetchDirOrFile(filePathOrDir) {
if (lstatSync(filePathOrDir).isDirectory()) {
readdirSync(filePathOrDir).map((p) =>
this.fetchDirOrFile(`${filePathOrDir}/${p}`)
);
} else if (['.ts', '.tsx'].includes(extname(filePathOrDir))) {
for (const path of readdirSync(filePathOrDir)) {
this.fetchDirOrFile(`${filePathOrDir}/${path}`);
}
} else if ([".ts", ".tsx"].includes(extname(filePathOrDir))) {
this.filePaths.push(filePathOrDir);
}
};
}
}
-27
View File
@@ -1,27 +0,0 @@
import {
existsSync,
readdirSync,
rmdirSync,
statSync,
unlinkSync,
} from 'node:fs';
import path from 'node:path';
/**
* Remove files
* @param {string} dir
*/
export const rmFiles = (dir) => {
if (!existsSync(dir)) {
return;
}
const files = readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
if (statSync(filePath).isDirectory()) {
rmFiles(filePath);
} else {
unlinkSync(filePath);
}
}
rmdirSync(dir);
};