You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多语言网站翻译函数故障:仅能读取语言文件单个值

问题:多语言网站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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:42:54