diff --git a/Plan/src/main/resources/assets/plan/plan/bungeeconfig.yml b/Plan/src/main/resources/assets/plan/plan/bungeeconfig.yml index 289a17216..4f5c22d00 100644 --- a/Plan/src/main/resources/assets/plan/plan/bungeeconfig.yml +++ b/Plan/src/main/resources/assets/plan/plan/bungeeconfig.yml @@ -62,6 +62,8 @@ Webserver: Alias: alias # HTTPS is required for Login. Disable_authentication: false + # Disable /auth/register endpoint + Disable_registration: false # Cross-Origin Resource Sharing (Requests from non-Plan web pages) # https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS CORS: diff --git a/Plan/src/main/resources/assets/plan/plan/config.yml b/Plan/src/main/resources/assets/plan/plan/config.yml index 617804487..a43d28e56 100644 --- a/Plan/src/main/resources/assets/plan/plan/config.yml +++ b/Plan/src/main/resources/assets/plan/plan/config.yml @@ -63,6 +63,8 @@ Webserver: Alias: alias # HTTPS is required for Login. Disable_authentication: false + # Disable /auth/register endpoint + Disable_registration: false # Cross-Origin Resource Sharing (Requests from non-Plan web pages) # https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS CORS: diff --git a/Plan/src/main/resources/assets/plan/plan/locale/locale_JA.yml b/Plan/src/main/resources/assets/plan/plan/locale/locale_JA.yml index f77b64939..0b7d2724f 100644 --- a/Plan/src/main/resources/assets/plan/plan/locale/locale_JA.yml +++ b/Plan/src/main/resources/assets/plan/plan/locale/locale_JA.yml @@ -237,9 +237,9 @@ html: new: "New:" unique: "接続したプレイヤーの総数:" description: - newPlayerRetention: "This value is a prediction based on previous players." + newPlayerRetention: "この値は、以前のプレイヤーに基づいた予測です。" noGameServers: "Some data requires Plan to be installed on game servers." - noGeolocations: "Geolocation gathering needs to be enabled in the config (Accept GeoLite2 EULA)." + noGeolocations: "位置情報の収集は設定で有効にする必要があります(GeoLite2のEULAに同意してください)。" noServerOnlinActivity: "オンラインアクティビティを表示するサーバーがありません" noServers: "データーベース内に登録されたサーバーが見つかりません" noServersLong: 'It appears that Plan is not installed on any game servers or not connected to the same database. See wiki for Network tutorial.' @@ -266,35 +266,35 @@ html: noServersOnline: "リクエストを処理するサーバーがオンラインではありません" playerNotSeen: "プレイヤーはこのサーバーでプレイしていません" serverNotExported: "Server doesn't exist, its data might not have been exported yet." - serverNotSeen: "Server doesn't exist" + serverNotSeen: "サーバーが存在しません" generic: none: "なし" label: active: "よくログインしている" - activePlaytime: "Active Playtime" + activePlaytime: "アクティブなプレイ時間" activityIndex: "活動指数" afk: "離席" afkTime: "離席時間" all: "全て" allTime: "全体" - alphabetical: "Alphabetical" - apply: "Apply" + alphabetical: "アルファベット順" + apply: "適用" asNumbers: "の情報" - average: "Average first session length" - averageActivePlaytime: "Average Active Playtime" - averageAfkTime: "Average AFK Time" - averageChunks: "Average Chunks" - averageCpuUsage: "Average CPU Usage" - averageEntities: "Average Entities" + average: "平均の初回セッション時間" + averageActivePlaytime: "平均アクティブプレイ時間" + averageAfkTime: "平均AFK時間" + averageChunks: "平均チャンク数" + averageCpuUsage: "平均CPU使用率" + averageEntities: "平均エンティティ数" averageKdr: "平均KDR" averageMobKdr: "モブに対してのKDR" averagePing: "平均Ping値" - averagePlayers: "Average Players" + averagePlayers: "平均プレイヤー数" averagePlaytime: "平均プレイ時間" - averageRamUsage: "Average RAM Usage" - averageServerDowntime: "Average Downtime / Server" + averageRamUsage: "平均メモリ使用量" + averageServerDowntime: "平均ダウンタイム / サーバー" averageSessionLength: "平均接続時間" - averageSessions: "Average Sessions" + averageSessions: "平均セッション" averageTps: "平均TPS" averageTps7days: "Average TPS (7 days)" banned: "BAN履歴" @@ -306,9 +306,9 @@ html: country: "国/地域" cpu: "CPU" cpuRam: "CPUとメモリー" - cpuUsage: "CPU Usage" + cpuUsage: "CPU使用率" currentPlayerbase: "ログインプレイヤー" - currentUptime: "Current Uptime" + currentUptime: "現状のアップタイム" dayByDay: "詳細情報" dayOfweek: "曜日" deadliestWeapon: "最もPvPで使用されている武器" @@ -322,14 +322,14 @@ html: favoriteServer: "お気に入りのサーバー" firstSession: "初参加" firstSessionLength: - average: "Average first session length" - median: "Median first session length" + average: "平均の初回セッション時間" + median: "初回セッション時間の中央値" geoProjection: - dropdown: "Select projection" - equalEarth: "Equal Earth" - mercator: "Mercator" - miller: "Miller" - ortographic: "Ortographic" + dropdown: "投影法を選ぶ" + equalEarth: "イコールアース図法" + mercator: "メルカトル図法" + miller: "ミラー図法" + ortographic: "正射図法" geolocations: "地域" help: activityIndexBasis: "Activity index is based on non-AFK playtime in the past 3 weeks (21 days). Each week is considered separately." @@ -374,7 +374,7 @@ html: thresholdUnit: "hours / week" tips: "Tips" usingTheGraph: "Using the Graph" - hourByHour: "Hour by Hour" + hourByHour: "1時間ごと" inactive: "休止中" indexInactive: "休止中" indexRegular: "しばしばログインしている" @@ -382,17 +382,17 @@ html: insights: "Insights" insights30days: "1ヶ月のパンチボード" irregular: "たまにログインしている" - joinAddress: "Join Address" - joinAddresses: "Join Addresses" + joinAddress: "参加したサーバーのアドレス" + joinAddresses: "参加したサーバーのアドレス" kdr: "KDR" killed: "殺した人" last24hours: "24時間" last30days: "1ヶ月" - last7days: "一週間" + last7days: "1週間" lastConnected: "直近の接続" lastPeak: "直近のピークタイム" lastSeen: "直近のオンライン" - latestJoinAddresses: "Latest Join Addresses" + latestJoinAddresses: "最後に参加したサーバーのアドレス" length: " 長さ" links: "LINKS" loadedChunks: "ロードされたチャンク数" @@ -403,7 +403,7 @@ html: lowTpsSpikes: "TPSの低下値" lowTpsSpikes7days: "Low TPS Spikes (7 days)" maxFreeDisk: "ディスクの最大空き容量" - medianSessionLength: "Median Session Length" + medianSessionLength: "セッションの長さの中央値" minFreeDisk: "ディスクの最低空き容量" mobDeaths: "Mobによって殺された回数" mobKdr: "Mobに対してのKDR" @@ -416,12 +416,12 @@ html: networkOnlineActivity: "ネットワーク内の接続状況" networkOverview: "ネットワーク概要" networkPage: "ネットワークページ" - new: "New" + new: "新規" newPlayerRetention: "新規プレイヤーの継続率" newPlayers: "新規プレイヤー" newPlayers7days: "New Players (7 days)" nickname: "ニックネーム" - noDataToDisplay: "No Data to Display" + noDataToDisplay: "表示するデータがありません" now: "現在" onlineActivity: "接続状況" onlineActivityAsNumbers: "接続状況の情報" @@ -429,8 +429,8 @@ html: operator: "管理者" overview: "概要" perDay: "/日" - perPlayer: "/プレイヤー(1プレイヤーあたりの)" - perRegularPlayer: "/登録済みプレイヤー(1登録済みプレイヤーあたりの)" + perPlayer: "/プレイヤー(1プレイヤーあたり)" + perRegularPlayer: "/登録済みプレイヤー(1登録済みプレイヤーあたり)" performance: "パフォーマンス" performanceAsNumbers: "パフォーマンスの情報" ping: "Ping" @@ -441,7 +441,7 @@ html: playerList: "プレイヤー一覧" playerOverview: "プレイヤーの概要" playerPage: "プレイヤーページ" - playerRetention: "Player Retention" + playerRetention: "プレイヤー推移" playerbase: "プレイヤーベース" playerbaseDevelopment: "登録されているプレイヤーの推移" playerbaseOverview: "Playerbase Overview" @@ -451,15 +451,15 @@ html: playersOnlineOverview: "接続状況の概要" playtime: "プレイ時間" plugins: "プラグイン" - pluginsOverview: "Plugins Overview" + pluginsOverview: "プラグイン一覧" punchcard: "パンチカード" punchcard30days: "1ヶ月のパンチボード" pvpPve: "PvPとPvE" pvpPveAsNumbers: "PVPとPvEの情報" - query: "Make a query" + query: "クエリを作る" quickView: "クイックビュー" - ram: "RAM" - ramUsage: "RAM Usage" + ram: "メモリ" + ramUsage: "メモリ使用量" recentKills: "最近のキル" recentPvpDeaths: "最近のPVPによる死亡" recentPvpKills: "最近のPVPによるキル" @@ -470,102 +470,102 @@ html: regularPlayers: "よくオンラインのプレイヤー" relativeJoinActivity: "オンラインと活動との関係性" retention: - groupByNone: "No grouping" + groupByNone: "グルーピング無し" groupByTime: "Group registered by" - inAnytime: "any time" - inLast180d: "in the last 6 months" - inLast30d: "in the last 30 days" - inLast365d: "in the last 12 months" - inLast730d: "in the last 24 months" - inLast7d: "in the last 7 days" - inLast90d: "in the last 3 months" - playersRegisteredInTime: "Players who registered" + inAnytime: "全期間" + inLast180d: "直近6ヶ月" + inLast30d: "直近30日" + inLast365d: "直近12ヶ月" + inLast730d: "直近24ヶ月" + inLast7d: "直近7日" + inLast90d: "直近3ヶ月" + playersRegisteredInTime: "登録日" retainedPlayersPercentage: "Retained Players %" - timeSinceRegistered: "Time since register date" - timeStep: "Time step" + timeSinceRegistered: "登録日からの経過時間" + timeStep: "時間幅" secondDeadliestWeapon: "2番目にPvPで使用されている武器" seenNicknames: "ニックネーム一覧" server: "サーバー" serverAnalysis: "サーバーの分析結果" serverAsNumberse: "サーバーの状況" - serverCalendar: "Server Calendar" + serverCalendar: "サーバーカレンダー" serverDowntime: "サーバーダウンタイム" serverOccupied: "プレイヤーがログインしている時間" serverOverview: "サーバーの概要" serverPage: "サーバーページ" serverPlaytime: "各サーバーのプレイ時間" serverPlaytime30days: "各サーバーでの1ヶ月のプレイ時間" - serverSelector: "Server selector" + serverSelector: "サーバーセレクター" servers: "接続されているサーバー" serversTitle: "接続されているサーバー" session: "オンライン" - sessionCalendar: "Session Calendar" + sessionCalendar: "セッションカレンダー" sessionEnded: " ログアウトした時間" sessionMedian: "平均オンライン" sessionStart: "接続した時間" sessions: "接続履歴" - sortBy: "Sort By" - stacked: "Stacked" + sortBy: "並べ替え" + stacked: "スタックビュー" themeSelect: "テーマ選択" thirdDeadliestWeapon: "3番目にPvPで使用されている武器" thirtyDays: "1ヶ月" thirtyDaysAgo: "1ヶ月前" time: - date: "Date" - day: "Day" - days: "Days" - hours: "Hours" - month: "Month" - months: "Months" - week: "Week" - weeks: "Weeks" - year: "Year" + date: "日付" + day: "日" + days: "日" + hours: "時間" + month: "月" + months: "月" + week: "週" + weeks: "週" + year: "年" timesKicked: "キック回数" toMainPage: "メインページに戻る" - total: "Total" + total: "合計" totalActive: "累計活動時間" totalAfk: "累計離席時間" - totalPlayers: "トータルプレイヤー数" + totalPlayers: "合計プレイヤー数" totalPlayersOld: "全プレイヤー数" - totalPlaytime: "トータルプレイ時間" - totalServerDowntime: "Total Server Downtime" + totalPlaytime: "合計プレイ時間" + totalServerDowntime: "サーバーの合計ダウンタイム" tps: "TPS" trend: "増減" trends30days: "1ヶ月間の増減" uniquePlayers: "接続したプレイヤーの総数" - uniquePlayers7days: "Unique Players (7 days)" + uniquePlayers7days: "直近7日間のユニークプレイヤー数" unit: - percentage: "Percentage" - playerCount: "Player Count" + percentage: "パーセンテージ" + playerCount: "プレイヤー数" veryActive: "とてもログインしている" - weekComparison: "直近1周間での比較" + weekComparison: "直近1週間での比較" weekdays: "'月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日'" world: "ワールドのロード数" worldPlaytime: "ワールドごとのプレイ時間" worstPing: "最低Ping値" - xAxis: "X Axis" - yAxis: "Y Axis" + xAxis: "X軸" + yAxis: "Y軸" login: - failed: "Login failed: " - forgotPassword: "Forgot Password?" + failed: "ログインに失敗: " + forgotPassword: "パスワードを忘れた?" forgotPassword1: "Forgot password? Unregister and register again." forgotPassword2: "Use the following command in game to remove your current user:" forgotPassword3: "Or using console:" forgotPassword4: "After using the command, " - login: "Login" - logout: "Logout" - password: "Password" - register: "Create an Account!" - username: "Username" + login: "ログイン" + logout: "ログアウト" + password: "パスワード" + register: "アカウントを作ろう!" + username: "ユーザー名" modal: info: bugs: "バグ報告" contributors: - bugreporters: "& Bug reporters!" - code: ":プログラミング貢献者 " + bugreporters: "そして、バグ報告者のみなさん!" + code: ":プログラミング貢献者 " donate: "このプラグイン開発に募金して頂いた人々へ特別な感謝を" text: '加えて、以下の素晴らしい人々が開発に貢献しています' - translator: ":翻訳者 " + translator: ":翻訳者 " developer: "開発者:" discord: "Discordのサポートチャンネル" license: "「Player Analytics」は以下のライセンスの下、開発されています" @@ -584,12 +584,12 @@ html: activity: text: "are in Activity Groups" banStatus: - name: "Ban status" - banned: "Banned" + name: "BAN状況" + banned: "BAN済" country: text: "have joined from country" generic: - allPlayers: "All players" + allPlayers: "全てのプレイヤー" and: "and " start: "of Players who " hasPlayedOnServers: @@ -600,11 +600,11 @@ html: text: "have Plugin boolean value" joinAddress: text: "joined with address" - nonOperators: "Non operators" - notBanned: "Not banned" + nonOperators: "オペレーターでない" + notBanned: "BANされていない" operatorStatus: - name: "Operator status" - operators: "Operators" + name: "オペレーターステータス" + operators: "オペレーター" playedBetween: text: "Played between" pluginGroup: @@ -614,51 +614,51 @@ html: text: "Registered between" skipped: "Skipped" title: - activityGroup: "Current activity group" + activityGroup: "活動時間のグループ" view: " View:" filters: - add: "Add a filter.." - loading: "Loading filters.." + add: "フィルタを追加する.." + loading: "フィルタ読み込み中.." generic: are: "`are`" label: from: ">from" - makeAnother: "Make another query" + makeAnother: "別のクエリを作る" servers: - all: "using data of all servers" + all: "以下に含まれる全てのサーバー" many: "using data of {number} servers" single: "using data of 1 server" two: "using data of 2 servers" to: ">to" - view: "Show a view" - performQuery: "Perform Query!" + view: "ビューを表示" + performQuery: "クエリを実行!" results: match: "matched ${resultCount} players" none: "Query produced 0 results" - title: "Query Results" + title: "クエリ結果" title: activity: "Activity of matched players" activityOnDate: 'Activity on ' sessionsWithinView: "Sessions within view" - text: "Query<" + text: "クエリ<" register: - completion: "Complete Registration" - completion1: "You can now finish registering the user." - completion2: "Code expires in 15 minutes" - completion3: "Use the following command in game to finish registration:" - completion4: "Or using console:" - createNewUser: "Create a new user" + completion: "登録を完了するには" + completion1: "ユーザー登録ができるようになりました" + completion2: "このコードは15分で使えなくなります" + completion3: "ゲームの中で以下のコマンドを実行し、登録を完了させてください:" + completion4: "もしくは、サーバーコンソールを使う場合:" + createNewUser: "新規ユーザーを作成" error: checkFailed: "Checking registration status failed: " failed: "Registration failed: " - noPassword: "You need to specify a Password" - noUsername: "You need to specify a Username" + noPassword: "パスワードを指定する必要があります" + noUsername: "ユーザー名を指定する必要があります" usernameLength: "Username can be up to 50 characters, yours is " - login: "Already have an account? Login!" - passwordTip: "Password should be more than 8 characters, but there are no limitations." - register: "Register" - success: "Registered a new user successfully! You can now login." - usernameTip: "Username can be up to 50 characters." + login: "もうアカウントがありますか?ログインはこちら!" + passwordTip: "パスワードは8文字以上である必要がありますが、その他の制限はありません。" + register: "登録" + success: "新規ユーザー登録が完了しました!ログインできるようになりました。" + usernameTip: "ユーザー名は50文字以内で指定します" text: clickToExpand: "クリックして展開" comparing15days: "直近15日との比較" diff --git a/react/dashboard/dashboard/package.json b/react/dashboard/dashboard/package.json index 3e5b129cc..437548cc4 100644 --- a/react/dashboard/dashboard/package.json +++ b/react/dashboard/dashboard/package.json @@ -24,16 +24,16 @@ "datatables.net-bs5": "^1.13.4", "datatables.net-responsive-bs5": "^2.4.1", "highcharts": "^10.3.3", - "i18next": "^22.4.15", + "i18next": "^22.5.0", "i18next-chained-backend": "^4.2.0", - "i18next-http-backend": "^2.2.0", + "i18next-http-backend": "^2.2.1", "i18next-localstorage-backend": "^4.1.1", "masonry-layout": "^4.2.2", "react": "^18.2.0", "react-bootstrap": "^2.7.4", "react-bootstrap-range-slider": "^3.0.8", "react-dom": "^18.2.0", - "react-i18next": "^12.2.2", + "react-i18next": "^12.3.1", "react-mcjsonchat": "^1.0.0", "react-router-dom": "6", "react-scripts": "5.0.1", diff --git a/react/dashboard/dashboard/src/views/layout/RegisterPage.js b/react/dashboard/dashboard/src/views/layout/RegisterPage.js index fd125a027..a800ae2e6 100644 --- a/react/dashboard/dashboard/src/views/layout/RegisterPage.js +++ b/react/dashboard/dashboard/src/views/layout/RegisterPage.js @@ -11,6 +11,7 @@ import ColorSelectorModal from "../../components/modal/ColorSelectorModal"; import {useAuth} from "../../hooks/authenticationHook"; import FinalizeRegistrationModal from "../../components/modal/FinalizeRegistrationModal"; import {fetchRegisterCheck, postRegister} from "../../service/authenticationService"; +import {useMetadata} from "../../hooks/metadataHook"; const Logo = () => { return ( @@ -43,6 +44,7 @@ const RegisterCard = ({children}) => { const RegisterForm = ({register}) => { const {t} = useTranslation(); + const {registrationDisabled} = useMetadata(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); @@ -51,6 +53,12 @@ const RegisterForm = ({register}) => { register(username, password).then(() => setPassword('')); }, [username, password, setPassword, register]); + if (registrationDisabled) { + return ( +
{t('html.register.disabled')}
+ ) + } + return (