/** * I18n.js * Internationalization module for Tank Adventure. * Auto-detects language from WeChat system info. * Supports {variable} placeholder interpolation. */ const zhLang = require('./zh'); const enLang = require('./en'); // ============================================================ // Language Detection // ============================================================ let _currentLang = 'en'; // default fallback try { const sysInfo = wx.getSystemInfoSync(); const lang = (sysInfo.language || '').toLowerCase(); // zh_CN, zh_TW, zh_HK, etc. if (lang.startsWith('zh')) { _currentLang = 'zh'; } } catch (e) { // Fallback to English if wx API is unavailable _currentLang = 'en'; } const _langPacks = { zh: zhLang, en: enLang, }; // ============================================================ // Translation Function // ============================================================ /** * Get translated text by key. * Supports {variable} placeholder interpolation. * * @param {string} key - The translation key, e.g. 'menu.title' * @param {Object} [params] - Optional parameters for interpolation * @returns {string} The translated text * * @example * t('menu.title') // => '坦克探险' or 'Tank Adventure' * t('pvp.hp', { count: 3 }) // => '生命 x3' or 'HP x3' */ function t(key, params) { // Try current language first let text = _langPacks[_currentLang] && _langPacks[_currentLang][key]; // Fallback to English if (text === undefined && _currentLang !== 'en') { text = _langPacks.en[key]; } // Fallback to key itself if (text === undefined) { return key; } // Interpolate {variable} placeholders if (params) { text = text.replace(/\{(\w+)\}/g, (match, name) => { return params[name] !== undefined ? String(params[name]) : match; }); } return text; } /** * Get the current language code. * @returns {string} 'zh' or 'en' */ function getLang() { return _currentLang; } /** * Set the language manually (for testing or future settings). * @param {string} lang - 'zh' or 'en' */ function setLang(lang) { if (_langPacks[lang]) { _currentLang = lang; } } module.exports = { t, getLang, setLang };