ajax - 在 WordPress 插件管理 ajax 调用中,使用站点语言环境的方式是什么?

标签 ajax wordpress plugins locale

升级到 WordPress 4.7 后,我将个人资料中的语言字段更改为英语,而网站的语言设置为希腊语。

我编写了一个显示小部件的插件。此小部件通过 ajax 调用刷新其内容。如前所述here (请参阅关于 admin-ajax.php 的注意事项),字符串通常以我的个人资料的语言(英语)返回,但我更愿意将它们放在站点的语言环境(希腊语)中。

添加语句后switch_to_locale( get_locale() )在 ajax 调用操作处理程序的第一行,使用默认文本域的表达式,如 __( 'Sunday' )确实被翻译成希腊语。但是,像 __( 'Sunday', 'my-plugin-textdomain' ) 这样的表达式永远不会被翻译。

我的问题是 在 ajax 调用期间,如何在我的站点(而不是我的个人资料)区域设置中显示来自插件文本域的字符串?

注意:

  • 在将我的个人资料的语言环境切换为英语之前,一切正常(即所有字符串都被翻译为希腊语)。
  • 我正在一个由操作 plugins_loaded 触发的函数中加载插件的文本域。
  • 由于最近在最新版本中发布了设置用户区域设置的功能,因此在 Internet 上搜索并没有得到有用的结果。
  • 最佳答案

    这是一个迟到的答案,但我发现了如何在 AJAX 调用今天工作之前加载相关的文本域,需要在这里分享:

    将隐藏的输入字段添加到您的表单或附加到您的数据:

    <input type='hidden' name='lang' value='<?php echo get_locale();?>'>
    

    或者
    {
       lang: '<?php echo get_locale()?>',
    }
    

    然后,就在您的 load_*_textdomain() 之前函数调用,这样写:
    if (isset($_GET["lang"])) {
        $locale = $_GET["lang"];
        add_filter('determine_locale', function()use($locale){ return $locale; });
    }
    

    它会将语言环境切换到所需的语言环境。请注意,语言环境类似于 en_USel相对于您的 .mo文件名。

    关于ajax - 在 WordPress 插件管理 ajax 调用中,使用站点语言环境的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731657/

    相关文章:

    java - 在范围 bukkit 编码中无法访问该类型的封闭实例

    java - 如何在 Eclipse 中包含 Javascript 文件以解决 HTML/JSP 文件中的 Javascript 警告?

    plugins - 为动态产品添加 Facebook 插件评论

    javascript - DOKSoft CKEditor 表格工具的配置

    WordPress:显示按年份分组的存档链接

    php - 如何通过更改选择来更改输入(文本框)中的值

    php - 使用 SQL 查询获取所有 WooCommerce 客户支付的订单

    Ajax 无法检索数据 (CAKPHP)

    javascript - 无法访问对象属性

    javascript - 如何使用 Ajax 每个函数和动态数量的 DIV 标签