【问题标题】:Super weird PHP translation workaround超级奇怪的 PHP 翻译解决方法
【发布时间】:2021-08-02 19:07:19
【问题描述】:

所以,我不确定以前是否已经这样做过。我刚刚在我的服务器上安装了一个 PHP 应用程序,我想翻译这个网站。

应用程序为每种语言使用 language_name.php 文件。每个语言文件都包含一个多维数组$_LANG

$_LANG 键范围为一级,$_LANG['l1'] = "string"; 大约5级,$_LANG['l1']['l2']['l3']['l4']['l5'] = "string";

我想尝试什么

创建嵌套的 foreach 循环以循环并回显 $key - $value 对。 之后我将编写一个翻译函数来翻译回显之前的值..

问题

  • 原始文件包含超过 3,750 行。

  • 我的回声版本只包含 3,387 个。


    <?php

    $_LANG['lang']['vars']['go'];
    $_LANG['at']['the'];
    $_LANG['top'];,

    foreach ($_LANG as $key => $value) {
        if (is_array($value)) {
        
            foreach ($value as $key1 => $value1) {            
                if (is_array($value1)) {
                
                    foreach ($value1 as $key2 => $value2) {
                        if (is_array($value2)) {
                        
                            foreach ($value2 as $key3 => $value3) {
                                if (is_array($value3)) {
                                
                                    foreach ($value3 as $key4 => $value4) {
                                        if (is_array($value4)) {
                                        
                                            foreach ($value4 as $key5 => $value5) {
                                                echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'][\''.$key4.'\'][\''.$key5.'\'] = "'.$value5.'";'.'<br>';
                                            }
                                        }
                                        else {
                                            echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'][\''.$key4.'\'] = "'.$value4.'";'.'<br>';
                                        }
                                    }
                                }
                                else {
                                    echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'] = "'.$value3.'";'.'<br>';
                                }
                            }
                        }
                        else {
                            echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'] = "'.$value2.'";'.'<br>';
                        }
                    }
                }
                else {
                    echo '$_LANG[\''.$key.'\'][\''.$key1.'\'] = "'.$value1.'";'.'<br>';
                }
            }
        }
        else {
            echo '$_LANG[\''.$key.'\'] = "'.$value.'";'.'<br>';
        }
    }

    ?>

【问题讨论】:

标签: php foreach localization


【解决方案1】:

所以,我在互联网上搜索并解决了自己的问题。

我决定坚持使用foreach() 循环并使用count() 函数来查看我是否回显出正确数量的变量。在确认它确实返回了所有 key|value 对之后,我开始了实际的翻译...更多解决方法...

我找到了一个 Git Repo Git Repo,它可以让我免费使用 Google 翻译服务,此时我将 foreach() 循环修改为类似的内容。

foreach ($_LANG as $key => $value) {
    if (is_array($value)) {
        
        foreach ($value as $key1 => $value1) {            
            if (is_array($value1)) {
                
                foreach ($value1 as $key2 => $value2) {
                    if (is_array($value2)) {
                        
                        foreach ($value2 as $key3 => $value3) {
                            if (is_array($value3)) {
                                
                                foreach ($value3 as $key4 => $value4) {
                                    if (is_array($value4)) {
                                        
                                        foreach ($value4 as $key5 => $value5) {
                                            echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'][\''.$key4.'\'][\''.$key5.'\'] = "'.$trans->translate('en', 'vi', $value5).'";'.'<br>';
                                        }
                                    }
                                    else {
                                        echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'][\''.$key4.'\'] = "'.$trans->translate('en', 'vi', $value4).'";'.'<br>';
                                    }
                                }

                            }
                            else {
                                echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'][\''.$key3.'\'] = "'.$trans->translate('en', 'vi', $value3).'";'.'<br>';
                            }
                        }

                    }
                    else {
                        echo '$_LANG[\''.$key.'\'][\''.$key1.'\'][\''.$key2.'\'] = "'.$trans->translate('en', 'vi', $value2).'";'.'<br>';
                    }
                }

            }
            else {
                echo '$_LANG[\''.$key.'\'][\''.$key1.'\'] = "'.$trans->translate('en', 'vi', $value1).'";'.'<br>';
            }
        }

    }
    else {
        echo '$_LANG[\''.$key.'\'] = "'.$trans->translate('en', 'vi', $value).'";'.'<br>';
    }
}

但是,由于 Google 翻译服务有很多限制,我一次只能收到大约 150 对 key|value,因此我必须在每次请求时使用 VPN 更改我的 IP 地址。

我知道这不是翻译网站内容的理想方式。

  • 复制和粘贴 3700 values 绝对不是一种选择。
  • 也绝对不会为 Google Cloud Translate API 付费。

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多