var LANG = { en: { nav_overview: 'Overview', nav_port_config: 'Port Configuration', nav_port_stat: 'Port Statistics', nav_l2: 'L2 Configuration', nav_mirror: 'Mirroring', nav_lag: 'Link Aggregation', nav_eee: 'EEE', nav_bandwidth: 'Bandwidth Limits', nav_system: 'System Settings', nav_fw_update: 'Firmware Update', port_name: 'Name', port_status: 'Status', port_not_enabled: 'Not enabled.', port_link_speed: 'Link speed', port_vendor: 'Vendor', port_model: 'Model', port_serial: 'Serial', port_temp: 'Temp', port_vcc: 'Vcc', port_tx_fault: 'TX-Fault', port_tx_disabled: 'TX-Disabled', port_tx_bias: 'TX-Bias', port_tx_power: 'TX-Power', port_rx_power: 'RX-Power', port_rx_los: 'RX-LOS', speed_disabled: 'Disabled', speed_down: 'Down', port_title: 'FreeSwitchOS Port Configuration', port_heading: 'Port Configuration', port_col_port: 'Port', port_col_name: 'Name', port_col_speed: 'Current Link Speed', port_col_set_speed: 'Set Speed', port_col_disabled: 'Disabled', port_col_apply: 'Apply', port_mtu_heading: 'Configure Maximum Frame Size (MTU) forwarded at Port', port_auto: 'Auto', port_2500m: '2500MBit/Full', port_1000m: '1000MBit/Full', port_100m_f: '100MBit/Full', port_100m_h: '100MBit/Half', port_10m_f: '10MBit/Full', port_10m_h: '10MBit/Half', port_apply: 'Apply', stat_title: 'FreeSwitchOS Port Statistics', stat_heading: 'Port Statistics', stat_detailed: 'Detailed Port Statistics', stat_close: 'Close', stat_col_port: 'Port', stat_col_name: 'Name', stat_col_link: 'link', stat_col_tx_good: 'TX Good', stat_col_tx_bad: 'TX Bad', stat_col_rx_good: 'RX Good', stat_col_rx_bad: 'RX Bad', stat_col_all: 'All Counters', stat_counter: 'Counter', stat_value: 'Value', stat_show: 'Show', vlan_title: 'FreeSwitchOS VLAN Configuration', vlan_heading: 'VLAN Configuration', vlan_select: 'VLAN Select:', vlan_choose: '— VLAN Choose —', vlan_id: 'VLAN ID:', vlan_get_config: 'Get Configuration', vlan_name: 'VLAN Name:', vlan_tagged: 'Tagged Ports', vlan_untagged: 'Untagged Ports', vlan_select_all: 'Select all', vlan_pvid: 'Use as default VLAN for incoming traffic (PVID)', vlan_update: 'Update / Create', vlan_configured: 'Configured VLANs', vlan_col_name: 'Name', vlan_col_member: 'Member Ports', vlan_col_tagged: 'Tagged Ports', vlan_col_untagged: 'Untagged Ports', vlan_col_pvid: 'PVID Ports', vlan_col_delete: 'Delete', vlan_set_id_first: 'Set VLAN ID first', vlan_delete_confirm: 'Delete VLAN ', lag_title: 'Link Aggregation Configuration', lag_heading: 'Link Aggregation Groups Configuration', lag_update: 'Update / Create', mirror_title: 'Mirror Configuration', mirror_heading: 'Mirror Configuration', mirror_enabled: 'Enabled:', mirror_port: 'Mirroring Port:', mirror_tx: 'Mirrored Ports (TX)', mirror_rx: 'Mirrored Ports (RX)', mirror_update: 'Update / Create', mirror_disable: 'Disable Mirroring', mirror_set_port_first: 'Set Mirroring Port first', mirror_select_ports: 'Select Mirrored Ports', eee_title: 'EEE Configuration', eee_heading: 'EEE Status', eee_advertising: 'Advertising', eee_partner: 'Link-Partner advertises', eee_port: 'Port', eee_active: 'Active?', eee_enable: 'Enable EEE', eee_disable: 'Disable EEE', eee_on: 'ON', eee_off: 'OFF', l2_title: 'FreeSwitchOS L2 Configuration', l2_heading: 'L2 Configuration', l2_col_port: 'Port', l2_col_type: 'Type', l2_col_remove: 'Remove Entry', l2_delete: 'Delete', l2_static: 'static', l2_learned: 'learned', bw_title: 'Ingress and Egress Bandwidth', bw_heading: 'Ingress and Egress Bandwidth', bw_ingress: 'Ingress', bw_egress: 'Egress', bw_col_port: 'Port', bw_col_limit: 'Limit', bw_col_bandwidth: 'Bandwidth [kBit/s]', bw_col_flow: 'Flow Control', bw_col_apply: 'Apply', bw_unlimited: 'UNLIMITED', sys_title: 'System Settings', sys_tab_system: 'System', sys_tab_advanced: 'Advanced', sys_tab_console: 'Console', sys_heading: 'System Settings', sys_ip: 'IP address:', sys_netmask: 'Netmask:', sys_gateway: 'Gateway:', sys_ip_note: 'When updating the above settings, remember to point your browser to the new IP afterwards:', sys_update: 'Update Settings', sys_save_label: 'Save all current settings to Flash:', sys_save: 'Save Settings to Flash', sys_advanced: 'Advanced Settings', sys_startup_config: 'Startup configuration:', sys_startup_warn: 'Be careful when saving the directly edited startup configuration, you can lock yourself out:', sys_clear_config: 'Clear Startup Config', sys_save_startup: 'Save Startup Settings to Flash', sys_reset: 'Reset Switch', sys_console: 'Console Command', sys_enter_cmd: 'Enter command:', sys_send_cmd: 'Send Command', sys_console_warn: 'Be careful when entering console commands, you can lock yourself out!', sys_invalid_ip: 'Invalid ip:', sys_reset_confirm: 'Are you sure you want to reset the switch?', sys_resetting: 'Switch is resetting. Please wait and refresh the page.', login_title: 'RTL Switch Login', login_heading: 'RTL Switch Login', login_wrong: 'Wrong password!', login_password: 'Password', login_login: 'Login', index_title: 'FreeSwitchOS Main Page', index_heading: 'Switch Configuration', index_settings: 'Settings', update_title: 'Firmware update', update_heading: 'Firmware Update', update_instruction: 'Choose a firmware update file to upload:', update_upload: 'Upload File', lang_switch: 'Language:', common_port: 'Port ', common_pkts: ' pkts', }, ja: { nav_overview: '概要', nav_port_config: 'ポート設定', nav_port_stat: 'ポート統計', nav_l2: 'L2 設定', nav_mirror: 'ミラーリング', nav_lag: 'リンクアグリゲーション', nav_eee: 'EEE', nav_bandwidth: '帯域制限', nav_system: 'システム設定', nav_fw_update: 'ファームウェア更新', port_name: '名前', port_status: '状態', port_not_enabled: '無効', port_link_speed: 'リンク速度', port_vendor: 'ベンダー', port_model: 'モデル', port_serial: 'シリアル', port_temp: '温度', port_vcc: '電圧', port_tx_fault: 'TX 障害', port_tx_disabled: 'TX 無効', port_tx_bias: 'TX バイアス', port_tx_power: 'TX 電力', port_rx_power: 'RX 電力', port_rx_los: 'RX 信号ロス', speed_disabled: '無効', speed_down: 'リンクダウン', port_title: 'FreeSwitchOS ポート設定', port_heading: 'ポート設定', port_col_port: 'ポート', port_col_name: '名前', port_col_speed: '現在のリンク速度', port_col_set_speed: '速度設定', port_col_disabled: '無効', port_col_apply: '適用', port_mtu_heading: 'ポートの最大フレームサイズ (MTU) 設定', port_auto: '自動', port_2500m: '2500Mbps/全二重', port_1000m: '1000Mbps/全二重', port_100m_f: '100Mbps/全二重', port_100m_h: '100Mbps/半二重', port_10m_f: '10Mbps/全二重', port_10m_h: '10Mbps/半二重', port_apply: '適用', stat_title: 'FreeSwitchOS ポート統計', stat_heading: 'ポート統計', stat_detailed: '詳細ポート統計', stat_close: '閉じる', stat_col_port: 'ポート', stat_col_name: '名前', stat_col_link: 'リンク', stat_col_tx_good: 'TX 正常', stat_col_tx_bad: 'TX 異常', stat_col_rx_good: 'RX 正常', stat_col_rx_bad: 'RX 異常', stat_col_all: '全カウンタ', stat_counter: 'カウンタ', stat_value: '値', stat_show: '表示', vlan_title: 'FreeSwitchOS VLAN 設定', vlan_heading: 'VLAN 設定', vlan_select: 'VLAN 選択:', vlan_choose: '— VLAN 選択 —', vlan_id: 'VLAN ID:', vlan_get_config: '設定取得', vlan_name: 'VLAN 名:', vlan_tagged: 'タグ付きポート', vlan_untagged: 'タグ無しポート', vlan_select_all: 'すべて選択', vlan_pvid: '受信トラフィックのデフォルト VLAN (PVID)', vlan_update: '更新 / 作成', vlan_configured: '設定済み VLAN', vlan_col_name: '名前', vlan_col_member: 'メンバーポート', vlan_col_tagged: 'タグ付きポート', vlan_col_untagged: 'タグ無しポート', vlan_col_pvid: 'PVID ポート', vlan_col_delete: '削除', vlan_set_id_first: 'VLAN ID を先に設定してください', vlan_delete_confirm: 'VLAN 削除 ', lag_title: 'リンクアグリゲーション設定', lag_heading: 'リンクアグリゲーショングループ設定', lag_update: '更新 / 作成', mirror_title: 'ミラーリング設定', mirror_heading: 'ミラーリング設定', mirror_enabled: '有効:', mirror_port: 'ミラーポート:', mirror_tx: 'ミラー元ポート (TX)', mirror_rx: 'ミラー元ポート (RX)', mirror_update: '更新 / 作成', mirror_disable: 'ミラーリング無効化', mirror_set_port_first: 'ミラーポートを先に設定してください', mirror_select_ports: 'ミラー元ポートを選択してください', eee_title: 'EEE 設定', eee_heading: 'EEE 状態', eee_advertising: 'EEE アドバタイジング', eee_partner: 'リンクパートナー広告', eee_port: 'ポート', eee_active: '有効?', eee_enable: 'EEE 有効化', eee_disable: 'EEE 無効化', eee_on: 'オン', eee_off: 'オフ', l2_title: 'FreeSwitchOS L2 設定', l2_heading: 'L2 設定', l2_col_port: 'ポート', l2_col_type: 'タイプ', l2_col_remove: 'エントリ削除', l2_delete: '削除', l2_static: '静的', l2_learned: '学習', bw_title: '入力/出力帯域制限', bw_heading: '入力/出力帯域制限', bw_ingress: '入力', bw_egress: '出力', bw_col_port: 'ポート', bw_col_limit: '制限', bw_col_bandwidth: '帯域 [kbps]', bw_col_flow: 'フロー制御', bw_col_apply: '適用', bw_unlimited: '制限無し', sys_title: 'システム設定', sys_tab_system: 'システム', sys_tab_advanced: '詳細設定', sys_tab_console: 'コンソール', sys_heading: 'システム設定', sys_ip: 'IP アドレス:', sys_netmask: 'ネットマスク:', sys_gateway: 'ゲートウェイ:', sys_ip_note: '上記設定を変更した場合は、ブラウザで新しい IP にアクセスしてください:', sys_update: '設定更新', sys_save_label: '現在の設定をフラッシュに保存:', sys_save: '設定をフラッシュに保存', sys_advanced: '詳細設定', sys_startup_config: '起動設定:', sys_startup_warn: '起動設定を直接編集する際は注意してください。ロックアウトされる可能性があります:', sys_clear_config: '起動設定クリア', sys_save_startup: '起動設定をフラッシュに保存', sys_reset: 'スイッチ再起動', sys_console: 'コンソールコマンド', sys_enter_cmd: 'コマンド入力:', sys_send_cmd: 'コマンド送信', sys_console_warn: 'コンソールコマンドは注意して入力してください。ロックアウトされる可能性があります!', sys_invalid_ip: '無効な IP: ', sys_reset_confirm: 'スイッチを再起動してもよろしいですか?', sys_resetting: 'スイッチを再起動中です。しばらく待ってからページをリロードしてください。', login_title: 'RTL スイッチ ログイン', login_heading: 'RTL スイッチ ログイン', login_wrong: 'パスワードが違います!', login_password: 'パスワード', login_login: 'ログイン', index_title: 'FreeSwitchOS メインページ', index_heading: 'スイッチ設定', index_settings: '設定', update_title: 'ファームウェア更新', update_heading: 'ファームウェア更新', update_instruction: 'アップロードするファームウェアファイルを選択:', update_upload: 'ファイルをアップロード', lang_switch: '言語:', common_port: 'ポート ', common_pkts: ' pkts', } }; var rtlLang = (function() { var saved = localStorage.getItem('rtl_lang'); if (saved && LANG[saved]) return saved; var browser = (navigator.language || navigator.userLanguage || 'en').substring(0, 2); return LANG[browser] ? browser : 'en'; })(); function t(key) { return LANG[rtlLang][key] || LANG['en'][key] || key; } function setLang(lang) { if (LANG[lang]) { localStorage.setItem('rtl_lang', lang); rtlLang = lang; document.querySelectorAll('[data-i18n]').forEach(function(el) { applyTranslation(el); }); var sel = document.getElementById('rtl-lang-select'); if (sel) sel.value = lang; } } function applyTranslation(el) { var key = el.getAttribute('data-i18n'); if (!key) return; if (el.tagName === 'INPUT' && (el.type === 'submit' || el.type === 'button')) { el.value = t(key); } else if (el.tagName === 'OPTION') { el.textContent = t(key); } else if (el.tagName === 'TITLE') { el.textContent = t(key); } else { el.innerHTML = t(key); } } document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('[data-i18n]').forEach(function(el) { applyTranslation(el); }); });