【问题标题】:language change via localStorage通过 localStorage 更改语言
【发布时间】:2020-11-08 23:02:47
【问题描述】:

使用<select> <option value = ""> </option>更改网站语言 语言更改成功。

<select class="tt-select" id="lang" name="forma" onchange="location = this.value;">
    <option value="<?php echo htmlspecialchars(return_i18n_setlang_url('en')); ?>">ENG</option>
    <option value="<?php echo htmlspecialchars(return_i18n_setlang_url('ru')); ?>">RUS</option>
    <option value="<?php echo htmlspecialchars(return_i18n_setlang_url('de')); ?>">DEU</option>
    <option value="<?php echo htmlspecialchars(return_i18n_setlang_url('es')); ?>">SPA</option>                             </select>

选择语言后,页面会重新加载并显示列表中的第一个值。如何使所选语言显示?

他们建议使用 localStorage,但我对此一无所知。我用谷歌做的,它不起作用::

<script>
         (function(){
                var select = document.querySelector('#lang');
                if (localStorage.selectedIndex !== undefined) {
                    select.selectedIndex = localStorage.selectedIndex;
                }
                select.onchange = function() {
                    localStorage.selectedIndex = this.selectedIndex;
                }
            })()
</script>

代码&lt;?php echo htmlspecialchars(return_i18n_setlang_url('es')); ?&gt; 强制网站以所需语言提供内容。我知道它需要以其他方式提供,但我不明白如何

【问题讨论】:

    标签: javascript php html local-storage


    【解决方案1】:

    我根本不会为此目的使用 js,PHP 知道您选择的语言,使用它在适当的&lt;option&gt; 中打印selected 属性:

    // assuming the PHP variable $lang contains the selected language
    <select class="tt-select" id="lang" name="forma" onchange="location = this.value;">
        <option <?php echo $lang == "en" ? "selected" : "" ?> value="<?php echo htmlspecialchars(return_i18n_setlang_url('en')); ?>">ENG</option>
        <option <?php echo $lang == "ru" ? "selected" : "" ?> value="<?php echo htmlspecialchars(return_i18n_setlang_url('ru')); ?>">RUS</option>
        <option <?php echo $lang == "de" ? "selected" : "" ?> value="<?php echo htmlspecialchars(return_i18n_setlang_url('de')); ?>">DEU</option>
        <option <?php echo $lang == "es" ? "selected" : "" ?> value="<?php echo htmlspecialchars(return_i18n_setlang_url('es')); ?>">SPA</option>
    </select>
    

    【讨论】:

    • 不起作用,页面刷新,一切都默认重置。代码 php echo htmlspecialchars(return_i18n_setlang_url('de')); ?>“生成链接 https://site.org/?setlang=de”。我可以用手写,语言切换仍然会发生。
    • 好的,然后 php 从 $_GET['setlang'] 获取语言,使用它代替我的 $lang 变量:
    • 很高兴为您提供帮助!您能否将我的答案标记为已接受(绿色勾号)?谢谢!
    • 我还是可以打扰你,如何确保当你转到另一个页面时,默认不安装所选项目(列表中的第一个)?
    • 我不确定你在问什么,无论如何,只要设置了 $_GET['setlang'],即只要 URL 包含 ?setlang=langcode,这个解决方案就可以工作。我假设当您转到另一个页面并选择了一种语言时,GET 变量仍然存在,以便设置正确的语言。
    猜你喜欢
    • 2020-04-26
    • 2016-12-30
    • 2011-07-24
    • 1970-01-01
    • 2022-12-16
    • 2018-06-04
    • 2013-08-07
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多