多语言网站翻译函数故障:仅能读取语言文件单个值
问题:多语言网站translate函数仅能获取单个翻译值
我为多语言网站编写了translate函数,但无法正常工作——仅能从语言文件中获取一个值,其余翻译键均无法返回对应内容。
函数代码
function translate($key) { $language = isset($_SESSION['language']) ? $_SESSION['language'] : 'en'; // 默认语言 $translationFile = 'languages/' . $language . '.php'; if (file_exists($translationFile)) { $translations = require_once $translationFile; if (isset($translations[$key])) { return $translations[$key]; } else { echo "未找到翻译键:" . $key; } } else { echo "语言文件不存在:" . $translationFile; } return ''; // 未找到翻译时返回空字符串 }
语言文件(en.php)
return [ 'arabic' => 'Arabic', 'nepali' => 'Nepali', 'english' => 'English', 'welcome_message' => 'Welcome to our website!', 'about' => 'About', 'services' => 'Services', 'contact' => 'Contact', 'dashboard' => 'Dashboard', 'dashboard_page' => 'Dashboard page', 'hello' => 'Hello', // 可添加更多翻译键值对 ];
问题原因
核心问题出在require_once语句上:它会确保目标文件仅被加载一次。第一次调用translate时,语言文件被加载并返回翻译数组;后续调用时,require_once不会再执行加载操作,此时$translations的值会是true(require_once加载成功后的返回值),而非预期的翻译数组,自然无法通过键名获取后续翻译内容。
修复方案
方案1:替换require_once为require
直接修改文件加载语句,让每次调用函数时都重新加载语言文件:
$translations = require $translationFile;
方案2:优化性能——缓存翻译数组(推荐)
为避免重复读取文件带来的性能损耗,用静态变量缓存已加载的翻译数组,仅在首次调用或语言切换时重新加载:
function translate($key) { static $translations = []; // 静态变量缓存各语言翻译数组 $language = isset($_SESSION['language']) ? $_SESSION['language'] : 'en'; $translationFile = 'languages/' . $language . '.php'; // 当前语言翻译未缓存时,才加载文件 if (!isset($translations[$language])) { if (file_exists($translationFile)) { $translations[$language] = require $translationFile; } else { echo "语言文件不存在:" . $translationFile; $translations[$language] = []; } } if (isset($translations[$language][$key])) { return $translations[$language][$key]; } else { echo "未找到翻译键:" . $key; return ''; } }
内容的提问来源于stack exchange,提问作者Syed Zain
相关产品推荐
相关产品推荐

