Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 如何替换一本词典';s缺少另一本词典的内容吗?_Dictionary_Lua - Fatal编程技术网

Dictionary 如何替换一本词典';s缺少另一本词典的内容吗?

Dictionary 如何替换一本词典';s缺少另一本词典的内容吗?,dictionary,lua,Dictionary,Lua,所以,我在为一个游戏做翻译,我有不同的字典。如果一种语言中没有翻译,我想将其设置为英语翻译。我尝试过的每一种结合字典的方法都以难以置信的低效收场 下面是一些简化的示例 local translation-sr = { Buttons = { Confirm = "Потврди"; Submit = "Унеси"; }; Countries = { Bloxell = "Блоксел"; USA = "С

所以,我在为一个游戏做翻译,我有不同的字典。如果一种语言中没有翻译,我想将其设置为英语翻译。我尝试过的每一种结合字典的方法都以难以置信的低效收场

下面是一些简化的示例

local translation-sr = {
    Buttons = {
        Confirm = "Потврди";
        Submit = "Унеси";
    };
    Countries = {
        Bloxell = "Блоксел";
        USA = "Сједињене Америчке Државе";
    };
    Firearms = {
        Manufacturers = {
            GenMot = "Џенерални Мотори";
            Intratec = "Интратек";
            TF = "ТФ Оружје";
        };
    };
};

local translation-en = {
    Buttons = {
        Confirm = "Confirm";
        Purchase = "Purchase";
        Submit = "Submit";
    };
    Countries = {
        Bloxell = "Bloxell";
        USA = "United States";
    };
    Firearms = {
        Manufacturers = {
            GenMot = "General Motors";
            Intratec = "Intratec ";
            TF = "TF Armaments";
        };
    };
    Languages = {
        Belarusian = "Belarusian";
        English = "English";
        French = "French";
        German = "German";
        Italian = "Italian";
        Russian = "Russian";
        Serbian = "Serbian";
        Spanish = "Spanish";
    };
};

我猜你想做这样的事

setmetatable(translation_sr.Buttons,{__index=translation_en.Buttons})

对于所有叶子表。如果只有几个子表,您可以手动完成此操作。

我认为您应该使用元表来完成所需的操作

我假设您将始终使用英语默认单词进行索引。如果是这样,您可以执行以下操作

local function default(t,k)
    return k
end

local translation_sr = {
    Button = setmetatable({
        Confirm = "Потврди",
        Submit = "Унеси",
    },
    { __index = default }),

    Countries = setmetatable({
        ["Bloxell"] = "Блоксел",
        ["United States"]= "Сједињене Америчке Државе",
    }, 
    { __index = default }),

    Firearms = {
        Manufacturers = setmetatable({
            ["General Motors"] = "Џенерални Мотори",
            ["Intratec"] = "Интратек",
            ["TF Armaments"] = "ТФ Оружје",
        }, 
        { __index = default }),
    },
}
此函数只返回表中不存在的键

local function default(t,k)
    return k
end

假设此键为英语单词,您将使用
“Purchase”
的返回值作为默认值,您将从
翻译中获得
“Purchase”
。这种方法不需要翻译。\u en

“我尝试过的每一种结合字典的方法都以难以置信的低效而告终。”它需要多“高效”呢?它毕竟是一种脚本语言。我的意思是它根本不是万能的,如果我添加一个新的层,我不想不断更新代码。好的,但是分层代码在哪里?你只给我们看了一堆桌子;你如何使用它们?如何用默认表中的值替换非默认表中不存在的值?这就是我想弄明白的,我过去的方法非常愚蠢。这段代码无法编译。尝试
translation\u sr
而不是
translation sr