92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
/**
|
|
* 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 };
|