Prechádzať zdrojové kódy

Add Japanese language support and translations
Co-authored-by: kz2870 <[email protected]>

Takahisa-Okawa 1 mesiac pred
rodič
commit
9de40f067b

+ 10 - 1
frontend/src/locale/IntlProvider.tsx

@@ -1,15 +1,21 @@
 import { createIntl, createIntlCache } from "react-intl";
 import langEn from "./lang/en.json";
+import langJa from "./lang/ja.json";
 import langList from "./lang/lang-list.json";
 
 // first item of each array should be the language code,
 // not the country code
 // Remember when adding to this list, also update check-locales.js script
-const localeOptions = [["en", "en-US"]];
+const localeOptions = [
+	["en", "en-US"],
+	["ja", "ja-JP"]
+];
 
 const loadMessages = (locale?: string): typeof langList & typeof langEn => {
 	const thisLocale = locale || "en";
 	switch (thisLocale.slice(0, 2)) {
+		case "ja":
+			return Object.assign({}, langList, langJa);
 		default:
 			return Object.assign({}, langList, langEn);
 	}
@@ -17,6 +23,9 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => {
 
 const getFlagCodeForLocale = (locale?: string) => {
 	switch (locale) {
+		case "ja-JP":
+		case "ja":
+			return "JP";
 		default:
 			return "EN";
 	}

+ 215 - 0
frontend/src/locale/lang/ja.json

@@ -0,0 +1,215 @@
+{
+  "access-list": "アクセスリスト",
+  "access-list.access-count": "{count} ルール",
+  "access-list.auth-count": "{count} ユーザー",
+  "access-list.help-rules-last": "少なくとも 1 つのルールが存在する場合、 他のすべてを拒否するルールが最後に追加されます",
+  "access-list.help.rules-order": "許可コマンドと拒否コマンドは定義された順番で適用されます",
+  "access-list.pass-auth": "認証情報をアップストリームに送信する",
+  "access-list.public": "公開されたアクセス",
+  "access-list.public.subtitle": "ベーシック認証を使用しません",
+  "access-list.satisfy-any": "いずれかを満たす",
+  "access-list.subtitle": "{users} ユーザー, {rules} ルール - 作成日時: {date}",
+  "access-lists": "アクセスリスト",
+  "action.add": "追加",
+  "action.add-location": "場所を追加",
+  "action.close": "閉じる",
+  "action.delete": "削除",
+  "action.disable": "無効化",
+  "action.download": "ダウンロード",
+  "action.edit": "編集",
+  "action.enable": "有効化",
+  "action.permissions": "権限",
+  "action.renew": "更新",
+  "action.view-details": "詳細",
+  "auditlogs": "監査ログ",
+  "cancel": "キャンセル",
+  "certificate": "証明書",
+  "certificate.custom-certificate": "証明書",
+  "certificate.custom-certificate-key": "証明書キー",
+  "certificate.custom-intermediate": "中間証明書",
+  "certificate.in-use": "使用中",
+  "certificate.none.subtitle": "証明書が割り当てられていません",
+  "certificate.none.subtitle.for-http": "このホストはHTTPSを使用しません",
+  "certificate.none.title": "無し",
+  "certificate.not-in-use": "未使用",
+  "certificate.renew": "証明書を更新",
+  "certificates": "証明書",
+  "certificates.custom": "カスタム証明書",
+  "certificates.custom.warning": "パスワードによって保護されたキーファイルはサポートされていません",
+  "certificates.dns.credentials": "資格情報ファイルの内容",
+  "certificates.dns.credentials-note": "このプラグインはプロバイダーのAPIキーか認証情報を含む設定ファイルが必要です",
+  "certificates.dns.credentials-warning": "このデータはファイルとデータベースにプレーンテキストとして保存されます",
+  "certificates.dns.propagation-seconds": "DNS伝播時間(秒)",
+  "certificates.dns.propagation-seconds-note": "DNSの伝搬時間を秒で指定します。空にするとデフォルトの値を使用します。",
+  "certificates.dns.provider": "DNSプロバイダー",
+  "certificates.dns.warning": "このセクションはCertbotとそのDNSプラグインの知識が必要です。各プラグインのドキュメントを参照してください。",
+  "certificates.http.reachability-404": "このドメインはNginx Proxy Managerではないサーバーを指しているようです。ドメインがこのNPMインスタンスを指していることを確認してください。",
+  "certificates.http.reachability-failed-to-check": "site24x7.comへの接続でエラーが発生し、到達性チェックに失敗しました",
+  "certificates.http.reachability-not-resolved": "このドメインには利用可能なサーバーがありません。ドメインが存在し、NPMインスタンスのIPアドレスを指していること、必要に応じてルーターでポート80が転送されていることを確認してください。",
+  "certificates.http.reachability-ok": "サーバーへ到達可能であり、証明書の作成が可能です。",
+  "certificates.http.reachability-other": "このドメインでサーバーが見つかりましたが予期しないステータスコード {code} を返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。",
+  "certificates.http.reachability-wrong-data": "このドメインでサーバーが見つかりましたが予期しないデータを返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。",
+  "certificates.http.test-results": "テスト結果",
+  "certificates.http.warning": "これらのドメインは、すでにこのインストール先を指すように設定されている必要がありますあ.",
+  "certificates.request.subtitle": "Let's Encryptを使用する",
+  "certificates.request.title": "新しい証明書を作成",
+  "column.access": "アクセス",
+  "column.authorization": "認証",
+  "column.authorizations": "認証",
+  "column.custom-locations": "カスタムロケーション",
+  "column.destination": "宛先",
+  "column.details": "詳細",
+  "column.email": "Email",
+  "column.event": "イベント",
+  "column.expires": "期限切れ",
+  "column.http-code": "アクセス",
+  "column.incoming-port": "受信ポート",
+  "column.name": "名前",
+  "column.protocol": "プロトコル",
+  "column.provider": "プロバイダー",
+  "column.roles": "Roles",
+  "column.rules": "ルール",
+  "column.satisfy": "Satisfy",
+  "column.satisfy-all": "すべて",
+  "column.satisfy-any": "いずれか",
+  "column.scheme": "スキーム",
+  "column.source": "ソース",
+  "column.ssl": "SSL",
+  "column.status": "ステータス",
+  "created-on": "作成日時: {date}",
+  "dashboard": "ダッシュボード",
+  "dead-host": "404 ホスト",
+  "dead-hosts": "404 ホスト",
+  "dead-hosts.count": "{count} 404 ホスト",
+  "disabled": "無効化",
+  "domain-names": "ドメイン名",
+  "domain-names.max": "{count}のドメイン名が最大です",
+  "domain-names.placeholder": "追加するドメインを入力...",
+  "domain-names.wildcards-not-permitted": "ワイルドカードはこのタイプでは許可されていません",
+  "domain-names.wildcards-not-supported": "ワイルドカードはこのCAではサポートされていません",
+  "domains.force-ssl": "SSLを強制",
+  "domains.hsts-enabled": "HSTSを有効化",
+  "domains.hsts-subdomains": "HSTSサブドメイン",
+  "domains.http2-support": "HTTP/2サポート",
+  "domains.use-dns": "DNSチャレンジを使用",
+  "email-address": "Emailアドレス",
+  "empty-search": "見つかりませんでした",
+  "empty-subtitle": "作ってみましょう",
+  "enabled": "有効",
+  "error.access.at-least-one": "少なくとも一つの認証またはアクセスルールが必要です",
+  "error.access.duplicate-usernames": "認証のユーザー名は他と同じ名前は使用できません",
+  "error.invalid-auth": "無効なemailまたはパスワード",
+  "error.invalid-domain": "無効なドメイン: {domain}",
+  "error.invalid-email": "無効なemailアドレス",
+  "error.max-character-length": "文字数は長くとも{max}文字です",
+  "error.max-domains": "ドメインが多すぎます, 最大値は{max}です",
+  "error.maximum": "最大値は{max}です",
+  "error.min-character-length": "文字数は少なくとも{min}文字です",
+  "error.minimum": "最小値は{min}です",
+  "error.passwords-must-match": "パスワードは一致する必要があります",
+  "error.required": "必須項目です",
+  "expires.on": "有効期限: {date}",
+  "footer.github-fork": "Fork me on Github",
+  "host.flags.block-exploits": "一般的なエクスプロイトをブロックする",
+  "host.flags.cache-assets": "アセットをキャッシュする",
+  "host.flags.preserve-path": "パスワードは一致する必要があります",
+  "host.flags.protocols": "プロトコル",
+  "host.flags.websockets-upgrade": "Websocketsサポート",
+  "host.forward-port": "転送ポート",
+  "host.forward-scheme": "スキーム",
+  "hosts": "ホスト",
+  "http-only": "HTTP Only",
+  "lets-encrypt": "Let's Encrypt",
+  "lets-encrypt-via-dns": "Let's Encrypt via DNS",
+  "lets-encrypt-via-http": "Let's Encrypt via HTTP",
+  "loading": "Loading…",
+  "login.title": "アカウントにログイン",
+  "nginx-config.label": "カスタムNginx設定",
+  "nginx-config.placeholder": "# Enter your custom Nginx configuration here at your own risk!",
+  "no-permission-error": "これを表示する権限がありません",
+  "notfound.action": "ホームに戻る",
+  "notfound.content": "申し訳ありませんが探しているページは見つかりませんでした",
+  "notfound.title": "おっと... エラーページにたどり着いてしまったようです",
+  "notification.error": "エラー",
+  "notification.object-deleted": "{object}は削除されました",
+  "notification.object-disabled": "{object}は無効化されました",
+  "notification.object-enabled": "{object}は有効化されました",
+  "notification.object-renewed": "{object}は再作成されました",
+  "notification.object-saved": "{object}は保存されました",
+  "notification.success": "成功",
+  "object.actions-title": "{object} #{id}",
+  "object.add": "{object}を追加",
+  "object.delete": "{object}を削除",
+  "object.delete.content": "本当に{object}を削除しますか?",
+  "object.edit": "{object}を編集",
+  "object.empty": "{objects}はありません",
+  "object.event.created": "{object}を作成済み",
+  "object.event.deleted": "{object}を削除済み",
+  "object.event.disabled": "{object}を無効化済み",
+  "object.event.enabled": "{object}を有効化済み",
+  "object.event.renewed": "{object}を再作成済み",
+  "object.event.updated": "{object}を更新済み",
+  "offline": "Offline",
+  "online": "Online",
+  "options": "Options",
+  "password": "パスワード",
+  "password.generate": "ランダムなパスワードを生成",
+  "password.hide": "パスワードを隠す",
+  "password.show": "パスワードを表示する",
+  "permissions.hidden": "非公開",
+  "permissions.manage": "管理",
+  "permissions.view": "表示のみ",
+  "permissions.visibility.all": "すべて",
+  "permissions.visibility.title": "可視性",
+  "permissions.visibility.user": "作成したもののみ",
+  "proxy-host": "プロキシホスト",
+  "proxy-host.forward-host": "転送ホスト名/IP",
+  "proxy-hosts": "プロキシホスト",
+  "proxy-hosts.count": "{count} プロキシホスト",
+  "public": "Public",
+  "redirection-host": "リダイレクトホスト",
+  "redirection-host.forward-domain": "転送ホスト",
+  "redirection-hosts": "リダイレクトホスト",
+  "redirection-hosts.count": "{count} リダイレクトホスト",
+  "role.admin": "管理者",
+  "role.standard-user": "一般ユーザー",
+  "save": "保存",
+  "setting": "設定",
+  "settings": "設定",
+  "settings.default-site": "デフォルトサイト",
+  "settings.default-site.404": "404ページ",
+  "settings.default-site.444": "返答しない (444)",
+  "settings.default-site.congratulations": "設定ページ",
+  "settings.default-site.description": "不明なホストを要求されたときにNginxが何を返すかを設定します",
+  "settings.default-site.html": "カスタムHTML",
+  "settings.default-site.html.placeholder": "<!-- Enter your custom HTML content here -->",
+  "settings.default-site.redirect": "リダイレクト",
+  "setup.preamble": "管理者アカウントを作成して始めましょう",
+  "setup.title": "ようこそ!",
+  "sign-in": "サインイン",
+  "ssl-certificate": "SSL証明書",
+  "stream": "ストリーム",
+  "stream.forward-host": "転送ポート",
+  "stream.incoming-port": "受信ポート",
+  "streams": "ストリーム",
+  "streams.count": "{count} ストリーム",
+  "streams.tcp": "TCP",
+  "streams.udp": "UDP",
+  "test": "テスト",
+  "user": "ユーザー",
+  "user.change-password": "変更するパスワード",
+  "user.confirm-password": "変更するパスワードを確認",
+  "user.current-password": "現在のパスワード",
+  "user.edit-profile": "プロフィールを編集",
+  "user.full-name": "フルネーム",
+  "user.login-as": "{name}としてサインイン",
+  "user.logout": "ログアウト",
+  "user.new-password": "新しいパスワード",
+  "user.nickname": "ニックネーム",
+  "user.set-password": "パスワードを設定",
+  "user.set-permissions": "{name}に権限を設定",
+  "user.switch-dark": "ダークモードに変更",
+  "user.switch-light": "ライトモードに変更",
+  "username": "ユーザー名",
+  "users": "ユーザー"
+}

+ 2 - 1
frontend/src/locale/lang/lang-list.json

@@ -1,3 +1,4 @@
 {
-  "locale-en-US": "English"
+  "locale-en-US": "English",
+  "locale-ja-JP": "日本語"
 }

+ 2 - 1
frontend/src/locale/src/HelpDoc/index.ts

@@ -1,8 +1,9 @@
 // import * as de from "./de/index";
 // import * as fa from "./fa/index";
 import * as en from "./en/index";
+import * as ja from "./ja/index";
 
-const items: any = { en };
+const items: any = { en, ja };
 
 const fallbackLang = "en";
 

+ 8 - 0
frontend/src/locale/src/HelpDoc/ja/AccessLists.md

@@ -0,0 +1,8 @@
+## アクセスリストとは
+
+アクセスリストは特定のクライアントIPへのブラックリストとホワイトリストを提供し、ベーシック認証によるプロキシホストへの認証を可能にします。
+
+複数のクライアントルールやユーザー名とパスワードを一つのアクセスリストに設定し、一つ以上の _プロキシホスト_ に適応することができます。
+
+これは認証システムを持たないサービスや不明なクライアントからの保護が必要な場合に有効です。
+

+ 21 - 0
frontend/src/locale/src/HelpDoc/ja/Certificates.md

@@ -0,0 +1,21 @@
+## 証明書
+
+### HTTP 証明書
+
+HTTPによって検証された証明書はLet's EncryptサーバーがHTTPでドメインにアクセスを試みサーバーを管理していることを確認できた場合に発行される証明書です。
+
+この方法では、HTTPアクセス可能でこのNginxを指しているドメインに対して _プロキシホスト_ を作成する必要があります。証明書が発行された後は、 _プロキシホスト_ を編集してこの証明書をHTTPS接続に使用するように設定できます。ただし、証明書の更新には、_プロキシホスト_ がHTTP接続用に設定された状態を維持する必要があります。
+
+この方法はワイルドカードのドメインをサポート _していません_ 。
+
+### DNS 証明書
+
+DNSによって検証された証明書にはDNSプロバイダープラグインが必要です。このプロバイダーはドメイン上に一時レコードを作成するために使用されます。その後Let's Encryptサーバーがそのレコードを参照し、あなたが所有していることを確認できると証明書が発行されます。
+
+このタイプの証明書を作成する際に、 _プロキシホスト_ を作成する必要はありません。また、_プロキシホスト_ をHTTPアクセス用に設定する必要もありません。
+
+この方法はワイルドカードのドメインをサポート _します_ 。
+
+### カスタム証明書
+
+このオプションでは、あなたの証明書認証局によって提供された自身の証明書をアップロードして使用できます。

+ 7 - 0
frontend/src/locale/src/HelpDoc/ja/DeadHosts.md

@@ -0,0 +1,7 @@
+## 404ホストとはなんですか?
+
+404ホストとは、単に404ページを表示するよう設定されたホストです。
+
+これは、検索エンジンに登録されたドメインに分かりやすいエラーページを提供したい場合や、検索エンジンのインデクサーにドメインページがもう存在しないことを伝えたい場合に便利です。
+
+このホストを持つもう一つの利点は、アクセスログを追跡し、参照元を確認できることです。

+ 7 - 0
frontend/src/locale/src/HelpDoc/ja/ProxyHosts.md

@@ -0,0 +1,7 @@
+## プロキシホストとは何ですか?
+
+プロキシホストは転送したいwebサービスの受信エンドポイントです。
+
+サービスにSSLサーバーが組み込まれていない場合でも、オプションでSSL終端機能を提供します。
+
+プロキシホストはNginx Proxy Managerのもっとも一般的な使用方法です。

+ 5 - 0
frontend/src/locale/src/HelpDoc/ja/RedirectionHosts.md

@@ -0,0 +1,5 @@
+## リダイレクトホストとは何ですか?
+
+リダイレクトホストは受信したリクエストを別のドメインにリダイレクトして訪問者に表示します。
+
+このタイプのもっとも一般的な使用理由は、webサイトのドメインが変更されたが検索エンジンやリンクが古いドメインを指し続けている場合です。

+ 5 - 0
frontend/src/locale/src/HelpDoc/ja/Streams.md

@@ -0,0 +1,5 @@
+## ストリームとは何ですか?
+
+Nginxの比較的新しい機能であるストリームは、TCP/UDPトラフィックをネットワーク上の別のコンピュータに直接転送します。
+
+ゲームサーバー、FTPサーバー、SSHサーバーを運用している場合に便利です。

+ 6 - 0
frontend/src/locale/src/HelpDoc/ja/index.ts

@@ -0,0 +1,6 @@
+export * as AccessLists from "./AccessLists.md";
+export * as Certificates from "./Certificates.md";
+export * as DeadHosts from "./DeadHosts.md";
+export * as ProxyHosts from "./ProxyHosts.md";
+export * as RedirectionHosts from "./RedirectionHosts.md";
+export * as Streams from "./Streams.md";

+ 641 - 0
frontend/src/locale/src/ja.json

@@ -0,0 +1,641 @@
+{
+	"access-list": {
+		"defaultMessage": "アクセスリスト"
+	},
+	"access-list.access-count": {
+		"defaultMessage": "{count} ルール"
+	},
+	"access-list.auth-count": {
+		"defaultMessage": "{count} ユーザー"
+	},
+	"access-list.help-rules-last": {
+		"defaultMessage": "少なくとも 1 つのルールが存在する場合、 他のすべてを拒否するルールが最後に追加されます"
+	},
+	"access-list.help.rules-order": {
+		"defaultMessage": "許可コマンドと拒否コマンドは定義された順番で適用されます"
+	},
+	"access-list.pass-auth": {
+		"defaultMessage": "認証情報をアップストリームに送信する"
+	},
+	"access-list.public": {
+		"defaultMessage": "公開されたアクセス"
+	},
+	"access-list.public.subtitle": {
+		"defaultMessage": "ベーシック認証を使用しません"
+	},
+	"access-list.satisfy-any": {
+		"defaultMessage": "いずれかを満たす"
+	},
+	"access-list.subtitle": {
+		"defaultMessage": "{users} ユーザー, {rules} ルール - 作成日時: {date}"
+	},
+	"access-lists": {
+		"defaultMessage": "アクセスリスト"
+	},
+	"action.add": {
+		"defaultMessage": "追加"
+	},
+	"action.add-location": {
+		"defaultMessage": "場所を追加"
+	},
+	"action.close": {
+		"defaultMessage": "閉じる"
+	},
+	"action.delete": {
+		"defaultMessage": "削除"
+	},
+	"action.disable": {
+		"defaultMessage": "無効化"
+	},
+	"action.download": {
+		"defaultMessage": "ダウンロード"
+	},
+	"action.edit": {
+		"defaultMessage": "編集"
+	},
+	"action.enable": {
+		"defaultMessage": "有効化"
+	},
+	"action.permissions": {
+		"defaultMessage": "権限"
+	},
+	"action.renew": {
+		"defaultMessage": "更新"
+	},
+	"action.view-details": {
+		"defaultMessage": "詳細"
+	},
+	"auditlogs": {
+		"defaultMessage": "監査ログ"
+	},
+	"cancel": {
+		"defaultMessage": "キャンセル"
+	},
+	"certificate": {
+		"defaultMessage": "証明書"
+	},
+	"certificate.custom-certificate": {
+		"defaultMessage": "証明書"
+	},
+	"certificate.custom-certificate-key": {
+		"defaultMessage": "証明書キー"
+	},
+	"certificate.custom-intermediate": {
+		"defaultMessage": "中間証明書"
+	},
+	"certificate.in-use": {
+		"defaultMessage": "使用中"
+	},
+	"certificate.none.subtitle": {
+		"defaultMessage": "証明書が割り当てられていません"
+	},
+	"certificate.none.subtitle.for-http": {
+		"defaultMessage": "このホストはHTTPSを使用しません"
+	},
+	"certificate.none.title": {
+		"defaultMessage": "無し"
+	},
+	"certificate.not-in-use": {
+		"defaultMessage": "未使用"
+	},
+	"certificate.renew": {
+		"defaultMessage": "証明書を更新"
+	},
+	"certificates": {
+		"defaultMessage": "証明書"
+	},
+	"certificates.custom": {
+		"defaultMessage": "カスタム証明書"
+	},
+	"certificates.custom.warning": {
+		"defaultMessage": "パスワードによって保護されたキーファイルはサポートされていません"
+	},
+	"certificates.dns.credentials": {
+		"defaultMessage": "資格情報ファイルの内容"
+	},
+	"certificates.dns.credentials-note": {
+		"defaultMessage": "このプラグインはプロバイダーのAPIキーか認証情報を含む設定ファイルが必要です"
+	},
+	"certificates.dns.credentials-warning": {
+		"defaultMessage": "このデータはファイルとデータベースにプレーンテキストとして保存されます"
+	},
+	"certificates.dns.propagation-seconds": {
+		"defaultMessage": "DNS伝播時間(秒)"
+	},
+	"certificates.dns.propagation-seconds-note": {
+		"defaultMessage": "DNSの伝搬時間を秒で指定します。空にするとデフォルトの値を使用します。"
+	},
+	"certificates.dns.provider": {
+		"defaultMessage": "DNSプロバイダー"
+	},
+	"certificates.dns.warning": {
+		"defaultMessage": "このセクションはCertbotとそのDNSプラグインの知識が必要です。各プラグインのドキュメントを参照してください。"
+	},
+	"certificates.http.reachability-404": {
+		"defaultMessage": "このドメインはNginx Proxy Managerではないサーバーを指しているようです。ドメインがこのNPMインスタンスを指していることを確認してください。"
+	},
+	"certificates.http.reachability-failed-to-check": {
+		"defaultMessage": "site24x7.comへの接続でエラーが発生し、到達性チェックに失敗しました"
+	},
+	"certificates.http.reachability-not-resolved": {
+		"defaultMessage": "このドメインには利用可能なサーバーがありません。ドメインが存在し、NPMインスタンスのIPアドレスを指していること、必要に応じてルーターでポート80が転送されていることを確認してください。"
+	},
+	"certificates.http.reachability-ok": {
+		"defaultMessage": "サーバーへ到達可能であり、証明書の作成が可能です。"
+	},
+	"certificates.http.reachability-other": {
+		"defaultMessage": "このドメインでサーバーが見つかりましたが予期しないステータスコード {code} を返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。"
+	},
+	"certificates.http.reachability-wrong-data": {
+		"defaultMessage": "このドメインでサーバーが見つかりましたが予期しないデータを返しました. NPMサーバーが動いていますか? ドメインがこのNPMインスタンスを指していることを確認してください。"
+	},
+	"certificates.http.test-results": {
+		"defaultMessage": "テスト結果"
+	},
+	"certificates.http.warning": {
+		"defaultMessage": "これらのドメインは、すでにこのインストール先を指すように設定されている必要がありますあ."
+	},
+	"certificates.request.subtitle": {
+		"defaultMessage": "Let's Encryptを使用する"
+	},
+	"certificates.request.title": {
+		"defaultMessage": "新しい証明書を作成"
+	},
+	"column.access": {
+		"defaultMessage": "アクセス"
+	},
+	"column.authorization": {
+		"defaultMessage": "認証"
+	},
+	"column.authorizations": {
+		"defaultMessage": "認証"
+	},
+	"column.custom-locations": {
+		"defaultMessage": "カスタムロケーション"
+	},
+	"column.destination": {
+		"defaultMessage": "宛先"
+	},
+	"column.details": {
+		"defaultMessage": "詳細"
+	},
+	"column.email": {
+		"defaultMessage": "Email"
+	},
+	"column.event": {
+		"defaultMessage": "イベント"
+	},
+	"column.expires": {
+		"defaultMessage": "期限切れ"
+	},
+	"column.http-code": {
+		"defaultMessage": "アクセス"
+	},
+	"column.incoming-port": {
+		"defaultMessage": "受信ポート"
+	},
+	"column.name": {
+		"defaultMessage": "名前"
+	},
+	"column.protocol": {
+		"defaultMessage": "プロトコル"
+	},
+	"column.provider": {
+		"defaultMessage": "プロバイダー"
+	},
+	"column.roles": {
+		"defaultMessage": "Roles"
+	},
+	"column.rules": {
+		"defaultMessage": "ルール"
+	},
+	"column.satisfy": {
+		"defaultMessage": "Satisfy"
+	},
+	"column.satisfy-all": {
+		"defaultMessage": "すべて"
+	},
+	"column.satisfy-any": {
+		"defaultMessage": "いずれか"
+	},
+	"column.scheme": {
+		"defaultMessage": "スキーム"
+	},
+	"column.source": {
+		"defaultMessage": "ソース"
+	},
+	"column.ssl": {
+		"defaultMessage": "SSL"
+	},
+	"column.status": {
+		"defaultMessage": "ステータス"
+	},
+	"created-on": {
+		"defaultMessage": "作成日時: {date}"
+	},
+	"dashboard": {
+		"defaultMessage": "ダッシュボード"
+	},
+	"dead-host": {
+		"defaultMessage": "404 ホスト"
+	},
+	"dead-hosts": {
+		"defaultMessage": "404 ホスト"
+	},
+	"dead-hosts.count": {
+		"defaultMessage": "{count} 404 ホスト"
+	},
+	"disabled": {
+		"defaultMessage": "無効化"
+	},
+	"domain-names": {
+		"defaultMessage": "ドメイン名"
+	},
+	"domain-names.max": {
+		"defaultMessage": "{count}のドメイン名が最大です"
+	},
+	"domain-names.placeholder": {
+		"defaultMessage": "追加するドメインを入力..."
+	},
+	"domain-names.wildcards-not-permitted": {
+		"defaultMessage": "ワイルドカードはこのタイプでは許可されていません"
+	},
+	"domain-names.wildcards-not-supported": {
+		"defaultMessage": "ワイルドカードはこのCAではサポートされていません"
+	},
+	"domains.force-ssl": {
+		"defaultMessage": "SSLを強制"
+	},
+	"domains.hsts-enabled": {
+		"defaultMessage": "HSTSを有効化"
+	},
+	"domains.hsts-subdomains": {
+		"defaultMessage": "HSTSサブドメイン"
+	},
+	"domains.http2-support": {
+		"defaultMessage": "HTTP/2サポート"
+	},
+	"domains.use-dns": {
+		"defaultMessage": "DNSチャレンジを使用"
+	},
+	"email-address": {
+		"defaultMessage": "Emailアドレス"
+	},
+	"empty-search": {
+		"defaultMessage": "見つかりませんでした"
+	},
+	"empty-subtitle": {
+		"defaultMessage": "作ってみましょう"
+	},
+	"enabled": {
+		"defaultMessage": "有効"
+	},
+	"error.access.at-least-one": {
+		"defaultMessage": "少なくとも一つの認証またはアクセスルールが必要です"
+	},
+	"error.access.duplicate-usernames": {
+		"defaultMessage": "認証のユーザー名は他と同じ名前は使用できません"
+	},
+	"error.invalid-auth": {
+		"defaultMessage": "無効なemailまたはパスワード"
+	},
+	"error.invalid-domain": {
+		"defaultMessage": "無効なドメイン: {domain}"
+	},
+	"error.invalid-email": {
+		"defaultMessage": "無効なemailアドレス"
+	},
+	"error.max-character-length": {
+		"defaultMessage": "文字数は長くとも{max}文字です"
+	},
+	"error.max-domains": {
+		"defaultMessage": "ドメインが多すぎます, 最大値は{max}です"
+	},
+	"error.maximum": {
+		"defaultMessage": "最大値は{max}です"
+	},
+	"error.min-character-length": {
+		"defaultMessage": "文字数は少なくとも{min}文字です"
+	},
+	"error.minimum": {
+		"defaultMessage": "最小値は{min}です"
+	},
+	"error.passwords-must-match": {
+		"defaultMessage": "パスワードは一致する必要があります"
+	},
+	"error.required": {
+		"defaultMessage": "必須項目です"
+	},
+	"expires.on": {
+		"defaultMessage": "有効期限: {date}"
+	},
+	"footer.github-fork": {
+		"defaultMessage": "Fork me on Github"
+	},
+	"host.flags.block-exploits": {
+		"defaultMessage": "一般的なエクスプロイトをブロックする"
+	},
+	"host.flags.cache-assets": {
+		"defaultMessage": "アセットをキャッシュする"
+	},
+	"host.flags.preserve-path": {
+		"defaultMessage": "パスワードは一致する必要があります"
+	},
+	"host.flags.protocols": {
+		"defaultMessage": "プロトコル"
+	},
+	"host.flags.websockets-upgrade": {
+		"defaultMessage": "Websocketsサポート"
+	},
+	"host.forward-port": {
+		"defaultMessage": "転送ポート"
+	},
+	"host.forward-scheme": {
+		"defaultMessage": "スキーム"
+	},
+	"hosts": {
+		"defaultMessage": "ホスト"
+	},
+	"http-only": {
+		"defaultMessage": "HTTP Only"
+	},
+	"lets-encrypt": {
+		"defaultMessage": "Let's Encrypt"
+	},
+	"lets-encrypt-via-dns": {
+		"defaultMessage": "Let's Encrypt via DNS"
+	},
+	"lets-encrypt-via-http": {
+		"defaultMessage": "Let's Encrypt via HTTP"
+	},
+	"loading": {
+		"defaultMessage": "Loading…"
+	},
+	"login.title": {
+		"defaultMessage": "アカウントにログイン"
+	},
+	"nginx-config.label": {
+		"defaultMessage": "カスタムNginx設定"
+	},
+	"nginx-config.placeholder": {
+		"defaultMessage": "# Enter your custom Nginx configuration here at your own risk!"
+	},
+	"no-permission-error": {
+		"defaultMessage": "これを表示する権限がありません"
+	},
+	"notfound.action": {
+		"defaultMessage": "ホームに戻る"
+	},
+	"notfound.content": {
+		"defaultMessage": "申し訳ありませんが探しているページは見つかりませんでした"
+	},
+	"notfound.title": {
+		"defaultMessage": "おっと... エラーページにたどり着いてしまったようです"
+	},
+	"notification.error": {
+		"defaultMessage": "エラー"
+	},
+	"notification.object-deleted": {
+		"defaultMessage": "{object}は削除されました"
+	},
+	"notification.object-disabled": {
+		"defaultMessage": "{object}は無効化されました"
+	},
+	"notification.object-enabled": {
+		"defaultMessage": "{object}は有効化されました"
+	},
+	"notification.object-renewed": {
+		"defaultMessage": "{object}は再作成されました"
+	},
+	"notification.object-saved": {
+		"defaultMessage": "{object}は保存されました"
+	},
+	"notification.success": {
+		"defaultMessage": "成功"
+	},
+	"object.actions-title": {
+		"defaultMessage": "{object} #{id}"
+	},
+	"object.add": {
+		"defaultMessage": "{object}を追加"
+	},
+	"object.delete": {
+		"defaultMessage": "{object}を削除"
+	},
+	"object.delete.content": {
+		"defaultMessage": "本当に{object}を削除しますか?"
+	},
+	"object.edit": {
+		"defaultMessage": "{object}を編集"
+	},
+	"object.empty": {
+		"defaultMessage": "{objects}はありません"
+	},
+	"object.event.created": {
+		"defaultMessage": "{object}を作成済み"
+	},
+	"object.event.deleted": {
+		"defaultMessage": "{object}を削除済み"
+	},
+	"object.event.disabled": {
+		"defaultMessage": "{object}を無効化済み"
+	},
+	"object.event.enabled": {
+		"defaultMessage": "{object}を有効化済み"
+	},
+	"object.event.renewed": {
+		"defaultMessage": "{object}を再作成済み"
+	},
+	"object.event.updated": {
+		"defaultMessage": "{object}を更新済み"
+	},
+	"offline": {
+		"defaultMessage": "Offline"
+	},
+	"online": {
+		"defaultMessage": "Online"
+	},
+	"options": {
+		"defaultMessage": "Options"
+	},
+	"password": {
+		"defaultMessage": "パスワード"
+	},
+	"password.generate": {
+		"defaultMessage": "ランダムなパスワードを生成"
+	},
+	"password.hide": {
+		"defaultMessage": "パスワードを隠す"
+	},
+	"password.show": {
+		"defaultMessage": "パスワードを表示する"
+	},
+	"permissions.hidden": {
+		"defaultMessage": "非公開"
+	},
+	"permissions.manage": {
+		"defaultMessage": "管理"
+	},
+	"permissions.view": {
+		"defaultMessage": "表示のみ"
+	},
+	"permissions.visibility.all": {
+		"defaultMessage": "すべて"
+	},
+	"permissions.visibility.title": {
+		"defaultMessage": "可視性"
+	},
+	"permissions.visibility.user": {
+		"defaultMessage": "作成したもののみ"
+	},
+	"proxy-host": {
+		"defaultMessage": "プロキシホスト"
+	},
+	"proxy-host.forward-host": {
+		"defaultMessage": "転送ホスト名/IP"
+	},
+	"proxy-hosts": {
+		"defaultMessage": "プロキシホスト"
+	},
+	"proxy-hosts.count": {
+		"defaultMessage": "{count} プロキシホスト"
+	},
+	"public": {
+		"defaultMessage": "Public"
+	},
+	"redirection-host": {
+		"defaultMessage": "リダイレクトホスト"
+	},
+	"redirection-host.forward-domain": {
+		"defaultMessage": "転送ホスト"
+	},
+	"redirection-hosts": {
+		"defaultMessage": "リダイレクトホスト"
+	},
+	"redirection-hosts.count": {
+		"defaultMessage": "{count} リダイレクトホスト"
+	},
+	"role.admin": {
+		"defaultMessage": "管理者"
+	},
+	"role.standard-user": {
+		"defaultMessage": "一般ユーザー"
+	},
+	"save": {
+		"defaultMessage": "保存"
+	},
+	"setting": {
+		"defaultMessage": "設定"
+	},
+	"settings": {
+		"defaultMessage": "設定"
+	},
+	"settings.default-site": {
+		"defaultMessage": "デフォルトサイト"
+	},
+	"settings.default-site.404": {
+		"defaultMessage": "404ページ"
+	},
+	"settings.default-site.444": {
+		"defaultMessage": "返答しない (444)"
+	},
+	"settings.default-site.congratulations": {
+		"defaultMessage": "設定ページ"
+	},
+	"settings.default-site.description": {
+		"defaultMessage": "不明なホストを要求されたときにNginxが何を返すかを設定します"
+	},
+	"settings.default-site.html": {
+		"defaultMessage": "カスタムHTML"
+	},
+	"settings.default-site.html.placeholder": {
+		"defaultMessage": "<!-- Enter your custom HTML content here -->"
+	},
+	"settings.default-site.redirect": {
+		"defaultMessage": "リダイレクト"
+	},
+	"setup.preamble": {
+		"defaultMessage": "管理者アカウントを作成して始めましょう"
+	},
+	"setup.title": {
+		"defaultMessage": "ようこそ!"
+	},
+	"sign-in": {
+		"defaultMessage": "サインイン"
+	},
+	"ssl-certificate": {
+		"defaultMessage": "SSL証明書"
+	},
+	"stream": {
+		"defaultMessage": "ストリーム"
+	},
+	"stream.forward-host": {
+		"defaultMessage": "転送ポート"
+	},
+	"stream.incoming-port": {
+		"defaultMessage": "受信ポート"
+	},
+	"streams": {
+		"defaultMessage": "ストリーム"
+	},
+	"streams.count": {
+		"defaultMessage": "{count} ストリーム"
+	},
+	"streams.tcp": {
+		"defaultMessage": "TCP"
+	},
+	"streams.udp": {
+		"defaultMessage": "UDP"
+	},
+	"test": {
+		"defaultMessage": "テスト"
+	},
+	"user": {
+		"defaultMessage": "ユーザー"
+	},
+	"user.change-password": {
+		"defaultMessage": "変更するパスワード"
+	},
+	"user.confirm-password": {
+		"defaultMessage": "変更するパスワードを確認"
+	},
+	"user.current-password": {
+		"defaultMessage": "現在のパスワード"
+	},
+	"user.edit-profile": {
+		"defaultMessage": "プロフィールを編集"
+	},
+	"user.full-name": {
+		"defaultMessage": "フルネーム"
+	},
+	"user.login-as": {
+		"defaultMessage": "{name}としてサインイン"
+	},
+	"user.logout": {
+		"defaultMessage": "ログアウト"
+	},
+	"user.new-password": {
+		"defaultMessage": "新しいパスワード"
+	},
+	"user.nickname": {
+		"defaultMessage": "ニックネーム"
+	},
+	"user.set-password": {
+		"defaultMessage": "パスワードを設定"
+	},
+	"user.set-permissions": {
+		"defaultMessage": "{name}に権限を設定"
+	},
+	"user.switch-dark": {
+		"defaultMessage": "ダークモードに変更"
+	},
+	"user.switch-light": {
+		"defaultMessage": "ライトモードに変更"
+	},
+	"username": {
+		"defaultMessage": "ユーザー名"
+	},
+	"users": {
+		"defaultMessage": "ユーザー"
+	}
+}

+ 3 - 0
frontend/src/locale/src/lang-list.json

@@ -1,5 +1,8 @@
 {
 	"locale-en-US": {
 		"defaultMessage": "English"
+	},
+	"locale-ja-JP": {
+		"defaultMessage": "日本語"
 	}
 }