Ponkhy
3 years ago
committed by
GitHub
18 changed files with 1436 additions and 625 deletions
@ -0,0 +1,3 @@ |
|||
package-lock.json |
|||
test.js |
|||
languages/ |
@ -0,0 +1,78 @@ |
|||
// Need to use es6 to read language files
|
|||
|
|||
import fs from "fs"; |
|||
import path from "path"; |
|||
import util from "util"; |
|||
|
|||
// https://stackoverflow.com/questions/13786160/copy-folder-recursively-in-node-js
|
|||
/** |
|||
* Look ma, it's cp -R. |
|||
* @param {string} src The path to the thing to copy. |
|||
* @param {string} dest The path to the new copy. |
|||
*/ |
|||
const copyRecursiveSync = function (src, dest) { |
|||
let exists = fs.existsSync(src); |
|||
let stats = exists && fs.statSync(src); |
|||
let isDirectory = exists && stats.isDirectory(); |
|||
if (isDirectory) { |
|||
fs.mkdirSync(dest); |
|||
fs.readdirSync(src).forEach(function (childItemName) { |
|||
copyRecursiveSync(path.join(src, childItemName), |
|||
path.join(dest, childItemName)); |
|||
}); |
|||
} else { |
|||
fs.copyFileSync(src, dest); |
|||
} |
|||
}; |
|||
console.log(process.argv) |
|||
const baseLangCode = process.argv[2] || "zh-HK"; |
|||
console.log("Base Lang: " + baseLangCode); |
|||
fs.rmdirSync("./languages", { recursive: true }); |
|||
copyRecursiveSync("../../src/languages", "./languages"); |
|||
|
|||
const en = (await import("./languages/en.js")).default; |
|||
const baseLang = (await import(`./languages/${baseLangCode}.js`)).default; |
|||
const files = fs.readdirSync("./languages"); |
|||
console.log(files); |
|||
for (const file of files) { |
|||
if (file.endsWith(".js")) { |
|||
console.log("Processing " + file); |
|||
const lang = await import("./languages/" + file); |
|||
|
|||
let obj; |
|||
|
|||
if (lang.default) { |
|||
console.log("is js module"); |
|||
obj = lang.default; |
|||
} else { |
|||
console.log("empty file"); |
|||
obj = { |
|||
languageName: "<Your Language name in your language (not in English)>" |
|||
}; |
|||
} |
|||
|
|||
// En first
|
|||
for (const key in en) { |
|||
if (! obj[key]) { |
|||
obj[key] = en[key]; |
|||
} |
|||
} |
|||
|
|||
// Base second
|
|||
for (const key in baseLang) { |
|||
if (! obj[key]) { |
|||
obj[key] = key; |
|||
} |
|||
} |
|||
|
|||
const code = "export default " + util.inspect(obj, { |
|||
depth: null, |
|||
}); |
|||
|
|||
fs.writeFileSync(`../../src/languages/${file}`, code); |
|||
|
|||
} |
|||
} |
|||
|
|||
fs.rmdirSync("./languages", { recursive: true }); |
|||
console.log("Done, fix the format by eslint now"); |
@ -0,0 +1,12 @@ |
|||
{ |
|||
"name": "update-language-files", |
|||
"type": "module", |
|||
"version": "1.0.0", |
|||
"description": "", |
|||
"main": "index.js", |
|||
"scripts": { |
|||
"test": "echo \"Error: no test specified\" && exit 1" |
|||
}, |
|||
"author": "", |
|||
"license": "ISC" |
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,10 @@ |
|||
# How to translate |
|||
|
|||
1. Fork this repo. |
|||
2. Create a language file. (e.g. `zh-TW.js`) The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm |
|||
3. `npm run update-language-files --base-lang=de-DE` |
|||
6. Your language file should be filled in. You can translate now. |
|||
7. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done. |
|||
|
|||
If you do not have programming skills, let me know in [Issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏 |
|||
|
@ -0,0 +1,110 @@ |
|||
export default { |
|||
languageName: "Danish", |
|||
Settings: "Indstillinger", |
|||
Dashboard: "Dashboard", |
|||
"New Update": "Opdatering tilgængelig", |
|||
Language: "Sprog", |
|||
Appearance: "Udseende", |
|||
Theme: "Tema", |
|||
General: "Generelt", |
|||
Version: "Version", |
|||
"Check Update On GitHub": "Tjek efter opdateringer på Github", |
|||
List: "Liste", |
|||
Add: "Tilføj", |
|||
"Add New Monitor": "Tilføj ny Overvåger", |
|||
"Quick Stats": "Oversigt", |
|||
Up: "Aktiv", |
|||
Down: "Inaktiv", |
|||
Pending: "Afventer", |
|||
Unknown: "Ukendt", |
|||
Pause: "Pause", |
|||
pauseDashboardHome: "Pauset", |
|||
Name: "Navn", |
|||
Status: "Status", |
|||
DateTime: "Dato / Tid", |
|||
Message: "Beskeder", |
|||
"No important events": "Inden vigtige begivenheder", |
|||
Resume: "Fortsæt", |
|||
Edit: "Rediger", |
|||
Delete: "Slet", |
|||
Current: "Aktuelt", |
|||
Uptime: "Oppetid", |
|||
"Cert Exp.": "Certifikatets udløb", |
|||
days: "Dage", |
|||
day: "Dag", |
|||
"-day": "-Dage", |
|||
hour: "Timer", |
|||
"-hour": "-Timer", |
|||
checkEverySecond: "Tjek hvert {0} sekund", |
|||
"Avg.": "Gennemsnit", |
|||
Response: " Respons", |
|||
Ping: "Ping", |
|||
"Monitor Type": "Overvåger Type", |
|||
Keyword: "Nøgleord", |
|||
"Friendly Name": "Visningsnavn", |
|||
URL: "URL", |
|||
Hostname: "Hostname", |
|||
Port: "Port", |
|||
"Heartbeat Interval": "Taktinterval", |
|||
Retries: "Gentagelser", |
|||
retriesDescription: "Maksimalt antal gentagelser, før tjenesten markeres som inaktiv og sender en meddelelse.", |
|||
Advanced: "Avanceret", |
|||
ignoreTLSError: "Ignorere TLS/SSL web fejl", |
|||
"Upside Down Mode": "Omvendt tilstand", |
|||
upsideDownModeDescription: "Håndter tilstanden omvendt. Hvis tjenesten er tilgængelig, vises den som inaktiv.", |
|||
"Max. Redirects": "Maks. Omdirigeringer", |
|||
maxRedirectDescription: "Maksimalt antal omdirigeringer, der skal følges. Indstil til 0 for at deaktivere omdirigeringer.", |
|||
"Accepted Status Codes": "Tilladte HTTP-Statuskoder", |
|||
acceptedStatusCodesDescription: "Vælg de statuskoder, der stadig skal vurderes som vellykkede.", |
|||
Save: "Gem", |
|||
Notifications: "Underretninger", |
|||
"Not available, please setup.": "Ikke tilgængelige, opsæt venligst.", |
|||
"Setup Notification": "Opsæt underretninger", |
|||
Light: "Lys", |
|||
Dark: "Mørk", |
|||
Auto: "Auto", |
|||
"Theme - Heartbeat Bar": "Tema - Tidslinje", |
|||
Normal: "Normal", |
|||
Bottom: "Bunden", |
|||
None: "Ingen", |
|||
Timezone: "Tidszone", |
|||
"Search Engine Visibility": "Søgemaskine synlighed", |
|||
"Allow indexing": "Tillad indeksering", |
|||
"Discourage search engines from indexing site": "Frabed søgemaskiner at indeksere webstedet", |
|||
"Change Password": "Ændre adgangskode", |
|||
"Current Password": "Nuværende adgangskode", |
|||
"New Password": "Ny adgangskode", |
|||
"Repeat New Password": "Gentag den nye adgangskode", |
|||
passwordNotMatchMsg: "Adgangskoderne er ikke ens.", |
|||
"Update Password": "Opdater adgangskode", |
|||
"Disable Auth": "Deaktiver autentificering", |
|||
"Enable Auth": "Aktiver autentificering", |
|||
Logout: "Log ud", |
|||
notificationDescription: "Tildel underretninger til Overvåger(e), så denne funktion træder i kraft.", |
|||
Leave: "Verlassen", |
|||
"I understand, please disable": "Jeg er indforstået, deaktiver venligst", |
|||
Confirm: "Bekræft", |
|||
Yes: "Ja", |
|||
No: "Nej", |
|||
Username: "Brugernavn", |
|||
Password: "Adgangskode", |
|||
"Remember me": "Husk mig", |
|||
Login: "Log ind", |
|||
"No Monitors, please": "Ingen Overvågere", |
|||
"add one": "tilføj en", |
|||
"Notification Type": "Underretningstype", |
|||
Email: "E-Mail", |
|||
Test: "Test", |
|||
"Certificate Info": "Certifikatoplysninger", |
|||
keywordDescription: "Søg efter et søgeord i almindelig HTML- eller JSON -output. Bemærk, at der skelnes mellem store og små bogstaver.", |
|||
deleteMonitorMsg: "Er du sikker på, at du vil slette overvågeren?", |
|||
deleteNotificationMsg: "Er du sikker på, at du vil slette denne underretning for alle overvågere? ", |
|||
resoverserverDescription: "Cloudflare er standardserveren, den kan til enhver tid ændres.", |
|||
"Resolver Server": "Navne-server", |
|||
rrtypeDescription: "Vælg den type RR, du vil overvåge.", |
|||
"Last Result": "Seneste resultat", |
|||
pauseMonitorMsg: "Er du sikker på, at du vil pause Overvågeren?", |
|||
"Create your admin account": "Opret din administratorkonto", |
|||
"Repeat Password": "Gentag adgangskoden", |
|||
"Resource Record Type": "Resource Record Type" |
|||
} |
@ -0,0 +1,110 @@ |
|||
export default { |
|||
languageName: "日本語", |
|||
checkEverySecond: "{0}秒ごとにチェックします。", |
|||
"Avg.": "平均 ", |
|||
retriesDescription: "サービスがダウンとしてマークされ、通知が送信されるまでの最大リトライ数", |
|||
ignoreTLSError: "HTTPS ウェブサイトの TLS/SSL エラーを無視する", |
|||
upsideDownModeDescription: "ステータスの扱いを逆にします。サービスに到達可能な場合は、DOWNとなる。", |
|||
maxRedirectDescription: "フォローするリダイレクトの最大数。リダイレクトを無効にするには0を設定する。", |
|||
acceptedStatusCodesDescription: "成功した応答とみなされるステータスコードを選択する。", |
|||
passwordNotMatchMsg: "繰り返しのパスワードが一致しません。", |
|||
notificationDescription: "監視を機能させるには、監視に通知を割り当ててください。", |
|||
keywordDescription: "プレーンHTMLまたはJSON応答でキーワードを検索し、大文字と小文字を区別します", |
|||
pauseDashboardHome: "一時停止", |
|||
deleteMonitorMsg: "この監視を削除してよろしいですか?", |
|||
deleteNotificationMsg: "全ての監視のこの通知を削除してよろしいですか?", |
|||
resoverserverDescription: "Cloudflareがデフォルトのサーバーですが、いつでもリゾルバサーバーを変更できます。", |
|||
rrtypeDescription: "監視するRRタイプを選択します", |
|||
pauseMonitorMsg: "一時停止しますか?", |
|||
Settings: "設定", |
|||
Dashboard: "ダッシュボード", |
|||
"New Update": "New Update", |
|||
Language: "言語", |
|||
Appearance: "外観", |
|||
Theme: "テーマ", |
|||
General: "General", |
|||
Version: "バージョン", |
|||
"Check Update On GitHub": "GitHubでアップデートを確認する", |
|||
List: "一覧", |
|||
Add: "追加", |
|||
"Add New Monitor": "監視の追加", |
|||
"Quick Stats": "統計", |
|||
Up: "Up", |
|||
Down: "Down", |
|||
Pending: "中止", |
|||
Unknown: "不明", |
|||
Pause: "一時停止", |
|||
Name: "名前", |
|||
Status: "ステータス", |
|||
DateTime: "日時", |
|||
Message: "メッセージ", |
|||
"No important events": "重要なイベントなし", |
|||
Resume: "再開", |
|||
Edit: "編集", |
|||
Delete: "削除", |
|||
Current: "現在", |
|||
Uptime: "起動時間", |
|||
"Cert Exp.": "証明書有効期限", |
|||
days: "日間", |
|||
day: "日", |
|||
"-day": "-日", |
|||
hour: "時間", |
|||
"-hour": "-時間", |
|||
Response: "レスポンス", |
|||
Ping: "Ping", |
|||
"Monitor Type": "監視タイプ", |
|||
Keyword: "キーワード", |
|||
"Friendly Name": "Friendly Name", |
|||
URL: "URL", |
|||
Hostname: "ホスト名", |
|||
Port: "ポート", |
|||
"Heartbeat Interval": "監視間隔", |
|||
Retries: "Retries", |
|||
Advanced: "Advanced", |
|||
"Upside Down Mode": "Upside Down Mode", |
|||
"Max. Redirects": "最大リダイレクト数", |
|||
"Accepted Status Codes": "承認されたステータスコード", |
|||
Save: "保存", |
|||
Notifications: "通知", |
|||
"Not available, please setup.": "利用できません。設定してください。", |
|||
"Setup Notification": "通知設定", |
|||
Light: "Light", |
|||
Dark: "Dark", |
|||
Auto: "Auto", |
|||
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar", |
|||
Normal: "通常", |
|||
Bottom: "下部", |
|||
None: "なし", |
|||
Timezone: "タイムゾーン", |
|||
"Search Engine Visibility": "検索エンジンでの表示", |
|||
"Allow indexing": "インデックス作成を許可する", |
|||
"Discourage search engines from indexing site": "検索エンジンにインデックスさせないようにする", |
|||
"Change Password": "パスワード変更", |
|||
"Current Password": "現在のパスワード", |
|||
"New Password": "新しいパスワード", |
|||
"Repeat New Password": "確認のため新しいパスワードをもう一度", |
|||
"Update Password": "パスワードの更新", |
|||
"Disable Auth": "認証の無効化", |
|||
"Enable Auth": "認証の有効化", |
|||
Logout: "ログアウト", |
|||
Leave: "作業を中止する", |
|||
"I understand, please disable": "理解した上で無効化する", |
|||
Confirm: "確認", |
|||
Yes: "はい", |
|||
No: "いいえ", |
|||
Username: "ユーザー名", |
|||
Password: "パスワード", |
|||
"Remember me": "パスワードを忘れた場合", |
|||
Login: "ログイン", |
|||
"No Monitors, please": "監視がありません", |
|||
"add one": "add one", |
|||
"Notification Type": "通知タイプ", |
|||
Email: "Eメール", |
|||
Test: "テスト", |
|||
"Certificate Info": "証明書情報", |
|||
"Resolver Server": "問い合わせ先DNSサーバ", |
|||
"Resource Record Type": "DNSレコード設定", |
|||
"Last Result": "最終結果", |
|||
"Create your admin account": "Create your admin account", |
|||
"Repeat Password": "Repeat Password" |
|||
} |
Loading…
Reference in new issue