1
0
mirror of https://github.com/serghey-rodin/vesta.git synced 2025-03-12 04:36:25 -07:00

Merge branch 'master' of github.com:serghey-rodin/vesta

This commit is contained in:
Serghey Rodin 2015-12-11 18:58:33 +02:00
commit cd0dbb4671
10 changed files with 301 additions and 272 deletions

@ -19,9 +19,14 @@ source $VESTA/conf/vesta.conf
is_language_valid() {
if [ ! -e "$VESTA/web/inc/i18n/$language.php" ]; then
echo "Error: language $language not exist"
log_event "$E_NOTEXIST $EVENT"
if ! [[ "$1" =~ ^[[:alnum:]_-]+$ ]]; then
echo "Error: language $1 is not valid"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
if [ ! -e "$VESTA/web/inc/i18n/$1.php" ]; then
echo "Error: language $1 doesn't exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
}

@ -62,7 +62,7 @@ exec (VESTA_CMD."v-list-user-packages json", $output, $return_var);
$packages = json_decode(implode('', $output), true);
unset($output);
// List lanugages
// List languages
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);

112
web/inc/i18n.php Normal file

@ -0,0 +1,112 @@
<?php
// Functions for internationalization
/**
* Translates string to given language in first parameter, key given in second parameter (dynamically loads required language). Works like spritf from second parameter
* @global array $LANG Associative array of language pharses
* @return string Translated string
*/
function _translate() {
global $LANG;
$args = func_get_args();
$l = $args[0];
if (!$l) return 'NO LANGUAGE DEFINED';
$key = $args[1];
if (!isset($LANG[$l])) {
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$l.'.php');
}
if (!isset($LANG[$l][$key])) {
$text=$key;
} else {
$text=$LANG[$l][$key];
}
array_shift($args);
if (count($args)>1) {
$args[0] = $text;
return call_user_func_array("sprintf",$args);
} else {
return $text;
}
}
/**
* Translates string by a given key in first parameter to current session language. Works like sprintf
* @global array $LANG Associative array of language pharses
* @return string Translated string
* @see _translate()
*/
function __() {
$args = func_get_args();
array_unshift($args,$_SESSION['language']);
return call_user_func_array("_translate",$args);
}
/**
* Detects user language from Accept-Language HTTP header.
* @param string Fallback language (default: 'en')
* @return string Language code (such as 'en' and 'ja')
*/
function detect_user_language($fallback='en') {
static $user_lang = '';
// Already detected
if (!empty($user_lang)) return $user_lang;
// Check if Accept-Language header is available
if (!isset($_SERVER) ||
!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ||
!is_string($_SERVER['HTTP_ACCEPT_LANGUAGE'])
) {
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}
// Sort Accept-Language by `q` value
$accept_langs = explode(',', preg_replace('/\s/', '', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
$accept_langs_sorted = [];
foreach ($accept_langs as $lang) {
$div = explode(';q=', $lang, 2);
if (count($div) < 2) {
// `q` value was not specfied
// -> Set default `q` value (1)
$div[] = '1';
}
list($code, $q) = $div;
if (preg_match('/^[\w\-]+$/', $code)) {
// Acceptable language code
$accept_langs_sorted[$code] = (double)$q;
}
}
arsort($accept_langs_sorted);
// List languages
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
// Find best matching language
foreach ($accept_langs_sorted as $user_lang => $dummy) {
$decision = '';
foreach ($languages as $prov_lang) {
if (strlen($decision) > strlen($prov_lang)) continue;
if (strpos($user_lang, $prov_lang) !== false) {
$decision = $prov_lang;
}
}
if (!empty($decision)) {
// Store result for reusing
$user_lang = $decision;
return $user_lang;
}
}
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}

@ -27,7 +27,7 @@ $LANG['ja'] = array(
'Add User' => 'ユーザーを追加',
'Add Domain' => 'ドメインを追加',
'Add Web Domain' => 'Webドメインを追加',
'Add Web Domain' => 'ウェブドメインを追加',
'Add DNS Domain' => 'DNSドメインを追加',
'Add DNS Record' => 'DNSレコードを追加',
'Add Mail Domain' => 'メールドメインを追加',
@ -62,8 +62,8 @@ $LANG['ja'] = array(
'rebuild db' => 'データベースを再構築',
'rebuild cron' => 'Cronを再構築',
'update counters' => 'カウンタを更新',
'suspend' => '停止',
'unsuspend' => '停止解除',
'suspend' => '凍結',
'unsuspend' => '凍結解除',
'delete' => '削除',
'show per user' => 'ユーザー別',
'login as' => '次のユーザーとしてログイン:',
@ -71,9 +71,9 @@ $LANG['ja'] = array(
'edit' => '編集',
'open webstats' => 'ウェブ統計を開く',
'view logs' => 'ログを表示',
'list records' => '%sのレコード',
'list records' => '%sのレコード',
'add record' => 'レコードを追加',
'list accounts' => '%sのアカウント',
'list accounts' => '%sのアカウント',
'add account' => 'アカウントを追加',
'open webmail' => 'ウェブメールを開く',
'list fail2ban' => 'fail2banリスト',
@ -86,7 +86,7 @@ $LANG['ja'] = array(
'restart' => '再起動',
'update' => '更新',
'generate' => '生成',
'Generate CSR' => 'CSRを生成',
'Generate CSR' => '証明書署名要求を生成',
'reread IP' => 'IPアドレスを再読み込み',
'enable autoupdate' => '自動更新を有効化',
'disable autoupdate' => '自動更新を無効化',
@ -114,7 +114,7 @@ $LANG['ja'] = array(
'Adding IP address' => 'IPアドレスの追加',
'Editing IP Address' => 'IPアドレスの編集',
'Editing Backup Exclusions' => 'バックアップ除外設定の編集',
'Generating CSR' => 'CSRの生成',
'Generating CSR' => '証明書署名要求の生成',
'Listing' => 'リスト中:',
'Search Results' => '検索結果',
'Adding Firewall Rule' => 'ファイアウォールの規則の追加',
@ -122,8 +122,8 @@ $LANG['ja'] = array(
'Adding IP Address to Banlist' => 'BANリストへのIPアドレスの追加',
'active' => 'アクティブ',
'spnd' => '停止中',
'suspended' => '停止中',
'spnd' => '凍結中',
'suspended' => '凍結中',
'running' => '実行中',
'stopped' => '停止中',
'outdated' => '旧版',
@ -155,9 +155,9 @@ $LANG['ja'] = array(
'Backend Template' => 'バックエンド テンプレート',
'Proxy Template' =>'プロキシ テンプレート',
'DNS Template' => 'DNSテンプレート',
'Web Domains' => 'Webドメイン',
'Web Domains' => 'ウェブドメイン',
'SSL Domains' => 'SSLドメイン',
'Web Aliases' => 'Webエイリアス',
'Web Aliases' => 'ウェブエイリアス',
'per domain' => 'ドメインごと',
'DNS Domains' => 'DNSドメイン',
'DNS Domains' => 'DNSドメイン',
@ -177,7 +177,7 @@ $LANG['ja'] = array(
'Proxy Support' => 'プロキシのサポート',
'Proxy Extensions' => 'プロキシ対象拡張子',
'Web Statistics' => 'ウェブアクセス統計',
'Additional FTP Account' => '追加のFTP',
'Additional FTP Account' => '追加のFTPアカウント',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => '有効期限',
@ -196,7 +196,7 @@ $LANG['ja'] = array(
'Host' => 'ホスト',
'Charset' => '文字セット',
'Min' => '分',
'Hour' => '時',
'Hour' => '時',
'Day' => '日',
'Month' => '月',
'Day of week' => '曜日',
@ -239,7 +239,7 @@ $LANG['ja'] = array(
'Release' => 'リリース',
'Architecture' => 'アーキテクチャ',
'Object' => 'オブジェクト',
'Owner' => '使用者',
'Owner' => '所有者',
'Username' => 'ユーザー名',
'Password' => 'パスワード',
'Email' => 'メールアドレス',
@ -247,9 +247,9 @@ $LANG['ja'] = array(
'Language' => '言語',
'First Name' => '名',
'Last Name' => '姓',
'Send login credentials to email address' => 'ログイン認証資格をメールアドレスに送信',
'Default Template' => 'デフォルトテンプレート',
'Default Name Servers' => 'デフォルトネームサーバー',
'Send login credentials to email address' => 'ログイン情報をメールアドレスに送信',
'Default Template' => '規定のテンプレート',
'Default Name Servers' => '規定のネームサーバー',
'Domain' => 'ドメイン',
'DNS Support' => 'DNSのサポート',
'Mail Support' => 'メールのサポート',
@ -258,16 +258,16 @@ $LANG['ja'] = array(
'SSL Certificate' => 'SSL証明書',
'SSL Key' => 'SSL鍵',
'SSL Certificate Authority / Intermediate' => 'SSL認証局',
'SSL CSR' => 'SSL CSR',
'SSL CSR' => 'SSL証明書署名要求',
'optional' => '任意',
'internal' => '内部',
'Statistics Authorization' => '統計の認証',
'Statistics Auth' => '統計の認証',
'Account' => 'アカウント',
'Prefix will be automaticaly added to username' => 'ユーザー名には接頭辞 %s が自動的に付加されます',
'Send FTP credentials to email' => 'FTP認証資格をメールアドレスに送信',
'Send FTP credentials to email' => 'FTPログイン情報をメールアドレスに送信',
'Expiration Date' => '有効期限',
'YYYY-MM-DD' => 'YYYY/MM/DD',
'YYYY-MM-DD' => 'YYYY-MM-DD',
'Name servers' => 'ネームサーバー',
'Record' => 'レコード',
'IP or Value' => 'IPアドレスまたは値',
@ -297,7 +297,7 @@ $LANG['ja'] = array(
'mail accounts' => 'メールアカウント',
'accounts' => 'アカウント',
'databases' => 'データベース',
'cron jobs' => 'cronジョブ',
'cron jobs' => 'Cronジョブ',
'backups' => 'バックアップ',
'quota' => '割り当て量',
'day of week' => '曜日',
@ -337,7 +337,7 @@ $LANG['ja'] = array(
'Download ErrorLog' => 'ErrorLogをダウンロード',
'Country' => '国',
'2 letter code' => '2レターコード',
'State / Province' => '都道府県',
'State / Province' => '州 / 都道府県',
'City / Locality' => '市区町村',
'Organization' => '組織',
'Action' => 'アクション',
@ -347,41 +347,41 @@ $LANG['ja'] = array(
'Banlist' => 'BANリスト',
'ranges are acceptable' => '範囲指定が可能です',
'CIDR format is supported' => 'CIDRフォーマットが使用できます',
'Add one more Name Server' => 'Add one more Name Server',
'Add one more Name Server' => 'ネームサーバーを追加',
'unlimited' => '無制限',
'1 account' => '1のアカウント',
'%s accounts' => '%sのアカウント',
'1 domain' => '1のドメイン',
'%s domains' => '%sのドメイン',
'1 record' => '1のレコード',
'%s records' => '%sのレコード',
'1 mail account' => '1のメールアカウント',
'%s mail accounts' => '%sのメールアカウント',
'1 database' => '1のデータベース',
'%s databases' => '%sのデータベース',
'1 cron job' => '1つのcronジョブ',
'%s cron jobs' => '%sつのcronジョブ',
'1 archive' => '1のアーカイブ',
'%s archives' => '%sのアーカイブ',
'1 package' => '1のパッケージ',
'%s packages' => '%sのパッケージ',
'1 IP address' => '1のIPアドレス',
'%s IP addresses' => '%sのIPアドレス',
'1 account' => '1のアカウント',
'%s accounts' => '%sのアカウント',
'1 domain' => '1のドメイン',
'%s domains' => '%sのドメイン',
'1 record' => '1のレコード',
'%s records' => '%sのレコード',
'1 mail account' => '1のメールアカウント',
'%s mail accounts' => '%sのメールアカウント',
'1 database' => '1のデータベース',
'%s databases' => '%sのデータベース',
'1 cron job' => '1個のCronジョブ',
'%s cron jobs' => '%s個のCronジョブ',
'1 archive' => '1のアーカイブ',
'%s archives' => '%sのアーカイブ',
'1 package' => '1のパッケージ',
'%s packages' => '%sのパッケージ',
'1 IP address' => '1のIPアドレス',
'%s IP addresses' => '%sのIPアドレス',
'1 month' => '1ヶ月',
'%s months' => '%sヶ月',
'1 log record' => '1のログレコード',
'%s log records' => '%sのログレコード',
'1 object' => '1のオブジェクト',
'%s objects' => '%sのオブジェクト',
'1 log record' => '1のログレコード',
'%s log records' => '%sのログレコード',
'1 object' => '1のオブジェクト',
'%s objects' => '%sのオブジェクト',
'no exclusions' => '除外しない',
'1 rule' => '1の規則',
'%s rules' => '%sの規則',
'1 rule' => '1の規則',
'%s rules' => '%sの規則',
'There are no currently banned IP' => '現在BANされているIPはありません',
'USER_CREATED_OK' => 'ユーザー <a href="/edit/user/?user=%s"><b>%s</b></a> は正常に作成されました',
'WEB_DOMAIN_CREATED_OK' => 'ドメイン <a href="/edit/web/?domain=%s"><b>%s</b></a> は正常に作成されました',
'DNS_DOMAIN_CREATED_OK' => 'DNS ドメイン <a href="/list/dns/?domain=%s"><b>%s</b></a> は正常に作成されました',
'DNS_DOMAIN_CREATED_OK' => 'DNSドメイン <a href="/list/dns/?domain=%s"><b>%s</b></a> は正常に作成されました',
'DNS_RECORD_CREATED_OK' => 'レコード <b>%s.%s</b> は正常に作成されました',
'MAIL_DOMAIN_CREATED_OK' => 'メールドメイン <a href="/list/mail/?domain=%s"><b>%s</b></a> は正常に作成されました',
'MAIL_ACCOUNT_CREATED_OK' => 'メールアカウント <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> は正常に作成されました',
@ -393,37 +393,37 @@ $LANG['ja'] = array(
'RULE_CREATED_OK' => '規則は正常に作成されました',
'Autoupdate has been successfully enabled' => '自動更新が有効化されました',
'Autoupdate has been successfully disabled' => '自動更新が無効化されました',
'Cronjob email reporting has been successfully enabled' => 'Cronjobのメール報告が有効化されました',
'Cronjob email reporting has been successfully disabled' => 'Cronjobのメール報告が無効化されました',
'Cronjob email reporting has been successfully enabled' => 'Cronジョブのメール報告が有効化されました',
'Cronjob email reporting has been successfully disabled' => 'Cronジョブのメール報告が無効化されました',
'Changes has been saved.' => '変更が保存されました',
'Confirmation' => '確認',
'DELETE_USER_CONFIRMATION' => 'ユーザー %s を削除してもよろしいですか?',
'SUSPEND_USER_CONFIRMATION' => 'ユーザー %s を停止してもよろしいですか?',
'UNSUSPEND_USER_CONFIRMATION' => 'ユーザー %s の停止を解除してもよろしいですか?',
'SUSPEND_USER_CONFIRMATION' => 'ユーザー %s を凍結してもよろしいですか?',
'UNSUSPEND_USER_CONFIRMATION' => 'ユーザー %s の凍結を解除してもよろしいですか?',
'DELETE_DOMAIN_CONFIRMATION' => 'ドメイン %s を削除してもよろしいですか?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'ドメイン %s を停止してもよろしいですか?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'ドメイン %s の停止を解除してもよろしいですか?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'ドメイン %s を凍結してもよろしいですか?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'ドメイン %s の凍結を解除してもよろしいですか?',
'DELETE_RECORD_CONFIRMATION' => 'レコード %s を削除してもよろしいですか?',
'SUSPEND_RECORD_CONFIRMATION' => 'レコード %s を停止してもよろしいですか?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'レコード %s の停止を解除してもよろしいですか?',
'SUSPEND_RECORD_CONFIRMATION' => 'レコード %s を凍結してもよろしいですか?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'レコード %s の凍結を解除してもよろしいですか?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'メールアカウント %s を削除してもよろしいですか?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'メールアカウント %s を停止してもよろしいですか?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'メールアカウント %s の停止を解除してもよろしいですか?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'メールアカウント %s を凍結してもよろしいですか?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'メールアカウント %s の凍結を解除してもよろしいですか?',
'DELETE_DATABASE_CONFIRMATION' => 'データベース %s を削除してもよろしいですか?',
'SUSPEND_DATABASE_CONFIRMATION' => 'データベース %s を停止してもよろしいですか?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'データベース %s の停止を解除してもよろしいですか?',
'SUSPEND_DATABASE_CONFIRMATION' => 'データベース %s を凍結してもよろしいですか?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'データベース %s の凍結を解除してもよろしいですか?',
'DELETE_CRON_CONFIRMATION' => 'Cronジョブを削除してもよろしいですか',
'SUSPEND_CRON_CONFIRMATION' => 'Cronジョブを停止してもよろしいですか?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Cronジョブの停止を解除してもよろしいですか?',
'SUSPEND_CRON_CONFIRMATION' => 'Cronジョブを凍結してもよろしいですか?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Cronジョブの凍結を解除してもよろしいですか?',
'DELETE_BACKUP_CONFIRMATION' => 'バックアップ %s を削除してもよろしいですか?',
'DELETE_EXCLUSION_CONFIRMATION' => 'バックアップ除外設定 %s を削除してもよろしいですか?',
'DELETE_PACKAGE_CONFIRMATION' => 'パッケージ %s を削除してもよろしいですか?',
'DELETE_IP_CONFIRMATION' => 'IPアドレス %s を削除してもよろしいですか?',
'DELETE_RULE_CONFIRMATION' => '規則 #%s を削除してもよろしいですか?',
'SUSPEND_RULE_CONFIRMATION' => '規則 #%s を停止してもよろしいですか?',
'UNSUSPEND_RULE_CONFIRMATION' => '規則 %s の停止を解除してもよろしいですか?',
'SUSPEND_RULE_CONFIRMATION' => '規則 #%s を凍結してもよろしいですか?',
'UNSUSPEND_RULE_CONFIRMATION' => '規則 %s の凍結を解除してもよろしいですか?',
'LEAVE_PAGE_CONFIRMATION' => 'ページを離れてもよろしいですか?',
'RESTART_CONFIRMATION' => '%s を再起動させてもよろしいですか?',
'RESTART_CONFIRMATION' => '%s を再起動てもよろしいですか?',
'Welcome' => 'ようこそ',
'LOGGED_IN_AS' => '%s としてログインしました',
'Error' => 'エラー',
@ -435,8 +435,8 @@ $LANG['ja'] = array(
'Password is too short.' => 'パスワードが短すぎます少なくとも6文字必要です',
'Error code:' => 'エラーコード: %s',
'SERVICE_ACTION_FAILED' => '"%s" "%s" に失敗しました',
'IP address is in use' => 'IPアドレスはすでに使われています',
'BACKUP_SCHEDULED' => 'タスクがキューに追加されました バックアップのダウンロードの準備が完了するとメールによる通知が送信されます',
'IP address is in use' => 'IPアドレスはに使われています',
'BACKUP_SCHEDULED' => 'タスクがキューに追加されました バックアップがダウンロード可能になると、メールによる通知が送信されます',
'BACKUP_EXISTS' => '現在バックアップが実行中です バックアップが完了するまでお待ちください',
'RESTORE_SCHEDULED' => 'タスクがキューに追加されました 復元が完了するとメールによる通知が送信されます',
'RESTORE_EXISTS' => '現在復元作業が実行中です 再度操作を行う前に復元作業が完了するまでお待ちください',
@ -444,21 +444,21 @@ $LANG['ja'] = array(
'WEB_EXCLUSIONS' => "ドメイン名を一行ずつ入力してください&#10;すべてのドメインを除外するには*を使用してください&#10;特定のディレクトリを除外するには次の形式を用いてください: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "ドメイン名を一行ずつ入力してください&#10;すべてのドメインを除外するには*を使用してください",
'MAIL_EXCLUSIONS' => "ドメイン名を一行ずつ入力してください&#10;すべてのドメインを除外するには*を使用してください&#10;特定のアカウントを除外するには次の形式を用いてください: domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "データベース名をフルで一行ずつ入力してください&#10;すべてのデータベースを除外するには*を使用してください",
'DB_EXCLUSIONS' => "完全なデータベース名を一行ずつ入力してください&#10;すべてのデータベースを除外するには*を使用してください",
'CRON_EXCLUSIONS' => "すべてのジョブを除外するには*を使用してください",
'USER_EXCLUSIONS' => "ディレクトリ名を一行ずつ入力してください&#10;すべてのディレクトリを除外するには*を使用してください",
'Welcome to Vesta Control Panel' => 'Vesta Control Panel ようこそ',
'Welcome to Vesta Control Panel' => 'Vesta Control Panel ようこそ',
'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "こんにちは %s %s さん\n",
'GREETINGS_GORDON_FREEMAN' => "こんにちは %s %s さん\n",
'GREETINGS' => "こんにちは\n",
'ACCOUNT_READY' => "アカウントは正常に作成され、使用する準備ができました\n\nhttps://%s/login/\ユーザー名: %s\nパスワード: %s\n\n--\nVesta Control Panel\n",
'ACCOUNT_READY' => "アカウントは正常に作成され、使用する準備ができました\n\nhttps://%s/login/\nユーザー名: %s\nパスワード: %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'FTPログイン認証資格',
'FTP_ACCOUNT_READY' => "FTPアカウントは正常に作成され、使用する準備ができました\n\ホスト名: %s\ユーザー名: %s_%s\nパスワード: %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'FTPログイン情報',
'FTP_ACCOUNT_READY' => "FTPアカウントは正常に作成され、使用する準備ができました\n\nホスト名: %s\nユーザー名: %s_%s\nパスワード: %s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'データベース認証資格',
'DATABASE_READY' => "データベースは正常に作成されました.\n\nデータベース %s\nユーザー %s\nパスワード: %s\n%s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'データベースログイン情報',
'DATABASE_READY' => "データベースは正常に作成されました\n\nデータベース %s\nユーザー %s\nパスワード: %s\n%s\n\n--\nVesta Control Panel\n",
'forgot password' => 'パスワードを忘れた場合',
'Confirm' => '確認',
@ -487,7 +487,7 @@ $LANG['ja'] = array(
'Configuring Server' => 'サーバー設定',
'Hostname' => 'ホスト名',
'Time Zone' => 'タイムゾーン',
'Default Language' => 'デフォルトの言語',
'Default Language' => '規定の言語',
'FileSystem Disk Quota ' => 'ディスク割り当て量',
'Vesta Control Panel Plugins' => 'Vesta Control Panel プラグイン',
'preview' => 'プレビュー',
@ -496,108 +496,108 @@ $LANG['ja'] = array(
'Template Manager' => 'テンプレートマネージャー',
'Backup Migration Manager' => 'バックアップ移行マネージャー',
'FileManager' => 'ファイルマネージャー',
'show: CPU / MEM / NET / DISK' => 'show: CPU / MEM / NET / DISK',
'show: CPU / MEM / NET / DISK' => '表示: CPU / MEM / NET / DISK',
'sort by' => 'ソート',
'Date' => '日付',
'Starred' => 'スター付き',
'Name' => '名前',
'File Manager' => 'File Manager',
'type' => 'type',
'size' => 'size',
'date' => 'date',
'name' => 'name',
'Initializing' => 'Initializing',
'UPLOAD' => 'UPLOAD',
'NEW FILE' => 'NEW FILE',
'NEW DIR' => 'NEW DIR',
'DELETE' => 'DELETE',
'RENAME' => 'RENAME',
'COPY' => 'COPY',
'ARCHIVE' => 'ARCHIVE',
'EXTRACT' => 'EXTRACT',
'DOWNLOAD' => 'DOWNLOAD',
'Hit' => 'Hit',
'to reload the page' => 'to reload the page',
'Directory name cannot be empty' => 'Directory name cannot be empty',
'File name cannot be empty' => 'File name cannot be empty',
'No file selected' => 'No file selected',
'No file or folder selected' => 'No file or folder selected',
'File type not supported' => 'File type not supported',
'Directory download not available in current version' => 'Directory download not available in current version',
'Directory not available' => 'Directory not available',
'Done' => 'Done',
'Close' => 'Close',
'Copy' => 'Copy',
'Cancel' => 'Cancel',
'Rename' => 'Rename',
'Delete' => 'Delete',
'Extract' => 'Extract',
'Create' => 'Create',
'Compress' => 'Compress',
'File Manager' => 'ファイルマネージャー',
'type' => '種類',
'size' => '容量',
'date' => '日付',
'name' => '名前',
'Initializing' => '初期化中',
'UPLOAD' => 'アップロード',
'NEW FILE' => '新規ファイル',
'NEW DIR' => '新規ディレクトリ',
'DELETE' => '削除',
'RENAME' => '名前の変更',
'COPY' => 'コピー',
'ARCHIVE' => 'アーカイブ',
'EXTRACT' => '展開',
'DOWNLOAD' => 'ダウンロード',
'Hit' => '',
'to reload the page' => 'を押すとページを再読み込みします',
'Directory name cannot be empty' => 'ディレクトリ名を入力してください',
'File name cannot be empty' => 'ファイル名を入力してください',
'No file selected' => 'ファイルが選択されていません',
'No file or folder selected' => 'ファイルやフォルダが選択されていません',
'File type not supported' => 'サポートされていないファイル形式です',
'Directory download not available in current version' => '現在のバージョンではディレクトリのダウンロードはできません',
'Directory not available' => 'ディレクトリが使用できません',
'Done' => '完了',
'Close' => '閉じる',
'Copy' => 'コピー',
'Cancel' => 'キャンセル',
'Rename' => '名前を変更',
'Delete' => '削除',
'Extract' => '展開',
'Create' => '作成',
'Compress' => '圧縮',
'OK' => 'OK',
'Are you sure you want to copy' => 'Are you sure you want to copy',
'Are you sure you want to delete' => 'Are you sure you want to delete',
'into' => 'into',
'existing files will be replaced' => 'existing files will be replaced',
'Original name' => 'Original name',
'File' => 'File',
'already exists' => 'already exists',
'Create file' => 'Create file',
'Create directory' => 'Create directory',
'Are you sure you want to copy' => '次のファイルをコピーしてもよろしいですか',
'Are you sure you want to delete' => '次のファイルを削除してもよろしいですか',
'into' => 'から',
'existing files will be replaced' => '既に存在するファイルは置き換えられます',
'Original name' => '元の名前',
'File' => 'ファイル',
'already exists' => 'は既に存在します',
'Create file' => 'ファイルの作成',
'Create directory' => 'ディレクトリの作成',
'Add New object' => 'Add New object',
'Save Form' => 'Save Form',
'Cancel saving form' => 'Cancel saving form',
'Go to USER list' => 'Go to USER list',
'Go to WEB list' => 'Go to WEB list',
'Go to DNS list' => 'Go to DNS list',
'Go to MAIL list' => 'Go to MAIL list',
'Go to DB list' => 'Go to DB list',
'Go to CRON list' => 'Go to CRON list',
'Go to BACKUP list' => 'Go to BACKUP list',
'Focus on search' => 'Focus on search',
'Display/Close shortcuts' => 'Display/Close shortcuts',
'Move backward through top menu' => 'Move backward through top menu',
'Move forward through top menu' => 'Move forward through top menu',
'Enter focused element' => 'Enter focused element',
'Add New object' => '新しい項目を追加する',
'Save Form' => '変更を保存する',
'Cancel saving form' => '変更を破棄する',
'Go to USER list' => 'ユーザーの一覧に移動',
'Go to WEB list' => 'ウェブの一覧に移動',
'Go to DNS list' => 'DNSの一覧に移動',
'Go to MAIL list' => 'メールの一覧に移動',
'Go to DB list' => 'データベースの一覧に移動',
'Go to CRON list' => 'CRONの一覧に移動',
'Go to BACKUP list' => 'バックアップの一覧に移動',
'Focus on search' => '検索欄にフォーカスする',
'Display/Close shortcuts' => 'ショートカットの表示を切り替える',
'Move backward through top menu' => '上部のメニューにおいて後方の項目に移動します',
'Move forward through top menu' => '上部のメニューにおいて前方の項目に移動します',
'Enter focused element' => 'フォーカスされた項目に入ります',
'Upload' => 'Upload',
'New File' => 'New File',
'New Folder' => 'New Folder',
'Download' => 'Download',
'Rename' => 'Rename',
'Copy' => 'Copy',
'Archive' => 'Archive',
'Delete' => 'Delete',
'Save File (in text editor)' => 'Save File (in text editor)',
'Close Popup / Cancel' => 'Close Popup / Cancel',
'Move Cursor Up' => 'Move Cursor Up',
'Move Cursor Dow' => 'Move Cursor Dow',
'Switch to Left Tab' => 'Switch to Left Tab',
'Switch to Right Tab' => 'Switch to Right Tab',
'Switch Tab' => 'Switch Tab',
'Go to the Top of File List' => 'Go to the Top of File List',
'Go to the Last File' => 'Go to the Last File',
'Open File/Enter Directory' => 'Open File/Enter Directory',
'Go to Parent Directory' => 'Go to Parent Directory',
'Select Current File' => 'Select Current File',
'Select Bunch of Files' => 'Select Bunch of Files',
'Append File to the Current Selection' => 'Append File to the Current Selection',
'Select All Files' => 'Select All Files',
'Upload' => 'アップロード',
'New File' => 'ファイルの作成',
'New Folder' => 'フォルダの作成',
'Download' => 'ダウンロード',
'Rename' => '名前の変更',
'Copy' => 'コピー',
'Archive' => 'アーカイブ',
'Delete' => '削除',
'Save File (in text editor)' => 'ファイルの保存(テキストエディタ上で)',
'Close Popup / Cancel' => 'ポップアップを閉じる / キャンセルする',
'Move Cursor Up' => 'カーソルを上に移動する',
'Move Cursor Dow' => 'カーソルを下に移動する',
'Switch to Left Tab' => '左のタブに切り替える',
'Switch to Right Tab' => '右のタブに切り替える',
'Switch Tab' => 'タブを切り替える',
'Go to the Top of File List' => 'ファイルリストの先頭に移動する',
'Go to the Last File' => '最後のファイルに移動する',
'Open File/Enter Directory' => 'ファイルを開く / ディレクトリに入る',
'Go to Parent Directory' => '親ディレクトリに移動する',
'Select Current File' => 'ファイルを選択する',
'Select Bunch of Files' => 'ファイルを範囲選択する',
'Append File to the Current Selection' => 'ファイルを追加選択する',
'Select All Files' => 'すべてのファイルを選択する',
'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager' =>
'shortcuts are inspired by magnificent GNU <a href="https://www.midnight-commander.org/">Midnight Commander</a> file manager',
'Licence Key' => 'Licence Key',
'Enter License Key' => 'Enter License Key',
'Buy Licence' => 'Buy Licence',
'Buy Lifetime License' => 'Buy Lifetime License',
'Disable and Cancel Licence' => 'Disable and Cancel Licence',
'Licence Activated' => 'Licence Activated',
'Licence Deactivated' => 'Licence Deactivated',
'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.',
'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.',
'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.'
'Licence Key' => 'ライセンスキー',
'Enter License Key' => 'ライセンスキーを入力',
'Buy Licence' => 'ライセンスを購入',
'Buy Lifetime License' => '永久ライセンスを購入',
'Disable and Cancel Licence' => 'ライセンスをキャンセルして無効化する',
'Licence Activated' => 'ライセンスが有効化されました',
'Licence Deactivated' => 'ライセンスが無効化されました',
'Restrict users so that they cannot use SSH and access only their home directory.' => 'ユーザーによるSSHの使用を禁止し、各自のホームディレクトリにのみアクセスできるように制限します',
'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '高機能なファイルマネージャーを用いてウェブ上のファイルを閲覧、コピー、編集、表示、復旧できます',
'This is a commercial module, you would need to purchace license key to enable it.' => 'これは有償の機能で、有効化するにはライセンスキーを購入する必要があります'
);
);

@ -1,6 +1,8 @@
<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n.php');
// Check system settings
if ((!isset($_SESSION['VERSION'])) && (!defined('NO_AUTH_REQUIRED'))) {
session_destroy();
@ -14,63 +16,15 @@ if ((!isset($_SESSION['user'])) && (!defined('NO_AUTH_REQUIRED'))) {
$_SESSION['request_uri'] = $_SERVER['REQUEST_URI'];
header("Location: /login/");
exit;
}
if (isset($_SESSION['user'])) {
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$_SESSION['language'].'.php');
if(!isset($_SESSION['token'])){
$token = uniqid(mt_rand(), true);
$_SESSION['token'] = $token;
}
}
/**
* Translates string by a given key in first parameter to current session language. Works like sprintf
* @global array $LANG Associative array of language pharses
* @return string Translated string
* @see _translate()
*/
function __() {
$args = func_get_args();
array_unshift($args,$_SESSION['language']);
return call_user_func_array("_translate",$args);
}
/**
* Translates string to given language in first parameter, key given in second parameter (dynamically loads required language). Works like spritf from second parameter
* @global array $LANG Associative array of language pharses
* @return string Translated string
*/
function _translate() {
global $LANG;
$args = func_get_args();
$l = $args[0];
if (!$l) return 'NO LANGUAGE DEFINED';
$key = $args[1];
if (!isset($LANG[$l])) {
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$l.'.php');
}
if (!isset($LANG[$l][$key])) {
$text=$key;
} else {
$text=$LANG[$l][$key];
}
array_shift($args);
if (count($args)>1) {
$args[0] = $text;
return call_user_func_array("sprintf",$args);
} else {
return $text;
}
}
define('VESTA_CMD', '/usr/bin/sudo /usr/local/vesta/bin/');
$i = 0;

@ -1,46 +1,10 @@
<?php
session_start();
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n.php');
if (empty($_SESSION['language'])) {
$_SESSION['language'] = 'en';
}
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$_SESSION['language'].'.php');
if (!function_exists('_translate')) {
function _translate() {
global $LANG;
$args = func_get_args();
$l = $args[0];
if (!$l) return 'NO LANGUAGE DEFINED';
$key = $args[1];
if (!isset($LANG[$l])) {
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$l.'.php');
}
if (!isset($LANG[$l][$key])) {
$text=$key;
} else {
$text=$LANG[$l][$key];
}
array_shift($args);
if (count($args)>1) {
$args[0] = $text;
return call_user_func_array("sprintf",$args);
} else {
return $text;
}
}
}
if (!function_exists('__')) {
function __() {
$args = func_get_args();
array_unshift($args,$_SESSION['language']);
return call_user_func_array("_translate",$args);
}
$_SESSION['language'] = detect_user_language();
}
?>

@ -93,8 +93,8 @@ foreach ($sys_arr as $key => $value) {
$_SESSION[$key] = $value;
}
// Set default language
if (empty($_SESSION['language'])) $_SESSION['language']='en';
// Detect language
if (empty($_SESSION['language'])) $_SESSION['language'] = detect_user_language();
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$_SESSION['language'].'.php');
require_once('../templates/header.html');

@ -74,14 +74,8 @@ if ((!empty($_POST['user'])) && (!empty($_POST['code'])) && (!empty($_POST['pass
}
}
// Set system language
exec (VESTA_CMD . "v-list-sys-config json", $output, $return_var);
$data = json_decode(implode('', $output), true);
if (!empty( $data['config']['LANGUAGE'])) {
$_SESSION['language'] = $data['config']['LANGUAGE'];
} else {
$_SESSION['language'] = 'en';
}
// Detect language
if (empty($_SESSION['language'])) $_SESSION['language'] = detect_user_language();
if (empty($_GET['action'])) {
require_once '../templates/header.html';

@ -125,7 +125,7 @@
if (( $value == $v_language ) || ( $svalue == $v_language)){
echo 'selected' ;
}
if (( $value == 'en' ) && (empty($v_language))){
if (( $value == detect_user_language() ) && (empty($v_language))){
echo 'selected' ;
}
echo ">".htmlentities($value)."</option>\n";

@ -104,7 +104,7 @@
if (( $value == $v_language ) || ( $svalue == $v_language)){
echo 'selected' ;
}
if (( $value == 'en' ) && (empty($v_language))){
if (( $value == detect_user_language() ) && (empty($v_language))){
echo 'selected' ;
}
echo ">".htmlentities($value)."</option>\n";