首页 > 解决方案 > 超级奇怪的 PHP 翻译解决方法

问题描述

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

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

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

我想尝试什么

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

问题


    <?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>';
        }
    }

    ?>

标签: phpforeachlocalization

解决方案


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

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

我找到了一个 Git Repo Git Repo,它可以让我免费使用谷歌翻译服务,此时我将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>';
    }
}

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

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

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

推荐阅读