WP独立站小语种 多语言插件transposh使用教程
wordpress是被用作制作海外独立站的重要cms,基于它的生态,各种各样的插件都有,还有成熟的可视化建站生态,本文主要将在自定义主题开发的过程中,不使用elementor、avada等情况下如何使用牛比的翻译插件transposh,在使用wordpress建站基本上都会考虑多语言的,语言多了面向的客户也就广了,一般情况下使用GTranslate这个免费版的足够用,它的工作原理就是自己本地浏览器上点了一下全网页的翻译,对服务器没有任何多余的请求;但是有个对于SEO来说比较重要的功能,将各类语言使用二级目录(二级域名)的形式访问,这在本质上是增多了网站的url数量,搜索引擎是可以索引这些url地址的,而这个功能在GTranslate上是需要充值的,便宜的29.9美元每月。
还没挣钱呢,肯定要控制成本的,所以急需要一个可以免费的替代方案,这不就有了transposh,这个完全免费,支持几乎所有的语言,它的原理是将翻译的文件保存在服务器的数据库里,当访问其他语言的页面,直接调取相应的翻译字段替换,所以对于使用者而言使用的代价就是数据库会被撑大,比如一个网站有100个页面,而选择了10种语言,那么数据库里就会有其他9中语言的翻译资料;不过好处是巨大的,可以保存翻译的页面为二级目录,如https://www.ydqic.com/en/,也就是你的网站内容被扩大了10倍,也就多了被索引,多了被客户发现的可能。transposh目前在wordpress的官方插件里是搜索不到的,需要到其官网 :https://transposh.org/,下载,然后放到插件目录,后台激活即可。如果不是熟悉的情况下,一下是不知道如何使用的,GTranslate在设置界面会提示用短代码在主题模板的里使用,而transposh这个默认是在外观-小工具里,很多情况,作为主题开发为了简洁可能会把小工具直接禁用掉,然后就不知道如何使用(我就是如此),国内网上这方便的资料还是少的,找起来比较费劲,这里给汇总踩坑过程:下载安装激活就不说了,直接从使用说起,在你的主题模板文件里,一般是你的header.php文件里,使用短代码的形式添加,transposh官方有集中类型的样式,可以通过参数不同自由选择,1、默认的[tpe widget="default/tpw_default.php"] 2.样式二[tpe widget="dropdown/tpw_image_dropdown.php"] 3.样式三,最喜欢这个,但是测试的时候没有呈现前面的国旗,不知是与我本身主题的样式文件冲突还是咋[tpe widget="select2/tpw_select2.php"] 4.样式四 国旗的多少和后台选定的翻译语言有关[tpe widget="flags/tpw_flags_css.php"] 5.样式五 国旗的多少和后台选定的翻译语言有关[tpe widget="flagslist/tpw_list_with_flags_css.php"] 如果默认的样式还是不满意,可以使用一个小插件辅助一下,在wordpress官方的插件商店可找到,搜索transposh,找到下面的图标,安装激活即可
值得提一下的是,如果启用了该辅助插件那么短码就需要改变了,在设置里的右侧可以看到具体的,看个人喜好选择<?php echo do_shortcode('[lsft_custom_dropdown_flags_names]'); ?> 还需要结合自己的主题样式,修改完善,最后我的主题效果: 到此,翻译插件就可以使用,transposh的触发模式是自动或者前台有进行了翻译操作就会保存,所以不要去点 设置里的生成全部,因为有可能你的服务器会卡死,也会有翻译不全的现象 注意
如果你的插件未正常翻译,查看源码,看看transposh.js有没有正常加载,源码里有没有如下片段。 如果没有的话,证明是没有正确被安装的,检查模版文件里wp_head() 和 wp_footer()是否齐全,插件通过这两个钩子加载文件的。还有就是注意有没有禁用掉wordpress自带的jquery(我的情况就是如此,一直找不到原因,最后发现是被禁掉了),我的主题文件的functions.php里有如下的代码,本意是禁用掉自带的jquery库和woo的样式精简代码,因为很多插件的js是基于自带的jquery库的,当禁用的时候,很多插件的文件也就无法正常加载了,当我取消禁用jquery的时候,翻译插件随机正常工作了, //禁止加载默认自带的jquery库 文件 function my_enqueue_scripts() { wp_deregister_script('jquery'); // 基于wordpress一些插件会加载不了 js 文件 wp_deregister_style('woocommerce'); } add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts', 1 ); 搜索页面不兼容的情况
默认启用状态下,在搜索页面会有调取部分资源不成功的情况,比如在头部顶部,先显示不了调取的产品信息问题,如下面的网站情况,顶部导航处直接调取流量产品相关,正常在其他页面都可以显示,就是在搜索页面的非默认语言里,会调取不到。
这个需要在插件设置的界面里,关闭下面的项目
Enable search in translated languages 通过Ahrefs的评分检测
使用默认的配置,在ahrefs上的站点检测下会有一些评分的扣分项,就像下面这样,如果像了解更多语言本地化的情况,可以看看谷歌官方的解释和Ahresf的说明。
下面说说修改方式,这个评分扣分来源就是插件生成的HTML标签不太符合规范,可以找到路径 /wp-content/plugins/transposh-translation-filter-for-wordpress/transposh.php, 文件位置大概918行,源码形如:
function add_rel_alternate() { if (is_404()) { return; } $widget_args = $this->widget->create_widget_args($this->get_clean_url()); tp_logger($widget_args, 4); foreach ($widget_args as $lang) { if (!$lang['active']) { echo '<link rel="alternate" hreflang="' . $lang['isocode'] . '" href="'; if ($this->options->full_rel_alternate) { $current_url = ( is_ssl() ? 'https://' : 'http://' ) . transposh_utils::get_clean_server_var('HTTP_HOST') . transposh_utils::get_clean_server_var('REQUEST_URI'); $url = transposh_utils::rewrite_url_lang_param($current_url, $this->home_url, $this->enable_permalinks_rewrite, $lang['isocode'], $this->edit_mode); if ($this->options->is_default_language($lang['isocode'])) { $url = transposh_utils::cleanup_url($url, $this->home_url); } echo $url; } else { echo $lang['url']; } echo '"/>'; } } }修改为两处,去掉判断当前激活的语言(这样就会一股脑的全部调取出来语种的标签),将默认的语种设置为x-default,具体可看修改为:
function add_rel_alternate() { if (is_404()) { return; } $widget_args = $this->widget->create_widget_args($this->get_clean_url()); tp_logger($widget_args, 4); foreach ($widget_args as $lang) { // if (!$lang['active']) { // defaul lang $isocode = $this->options->is_default_language($lang['isocode']) ? 'x-default' : $lang['isocode']; echo '<link rel="alternate" hreflang="' . $isocode . '" href="'; if ($this->options->full_rel_alternate) { $current_url = ( is_ssl() ? 'https://' : 'http://' ) . transposh_utils::get_clean_server_var('HTTP_HOST') . transposh_utils::get_clean_server_var('REQUEST_URI'); $url = transposh_utils::rewrite_url_lang_param($current_url, $this->home_url, $this->enable_permalinks_rewrite, $lang['isocode'], $this->edit_mode); if ($this->options->is_default_language($lang['isocode'])) { $url = transposh_utils::cleanup_url($url, $this->home_url); } echo $url; } else { echo $lang['url']; } echo '"/>'; // } } }
还没挣钱呢,肯定要控制成本的,所以急需要一个可以免费的替代方案,这不就有了transposh,这个完全免费,支持几乎所有的语言,它的原理是将翻译的文件保存在服务器的数据库里,当访问其他语言的页面,直接调取相应的翻译字段替换,所以对于使用者而言使用的代价就是数据库会被撑大,比如一个网站有100个页面,而选择了10种语言,那么数据库里就会有其他9中语言的翻译资料;不过好处是巨大的,可以保存翻译的页面为二级目录,如https://www.ydqic.com/en/,也就是你的网站内容被扩大了10倍,也就多了被索引,多了被客户发现的可能。transposh目前在wordpress的官方插件里是搜索不到的,需要到其官网 :https://transposh.org/,下载,然后放到插件目录,后台激活即可。如果不是熟悉的情况下,一下是不知道如何使用的,GTranslate在设置界面会提示用短代码在主题模板的里使用,而transposh这个默认是在外观-小工具里,很多情况,作为主题开发为了简洁可能会把小工具直接禁用掉,然后就不知道如何使用(我就是如此),国内网上这方便的资料还是少的,找起来比较费劲,这里给汇总踩坑过程:下载安装激活就不说了,直接从使用说起,在你的主题模板文件里,一般是你的header.php文件里,使用短代码的形式添加,transposh官方有集中类型的样式,可以通过参数不同自由选择,1、默认的[tpe widget="default/tpw_default.php"]
如果你的插件未正常翻译,查看源码,看看transposh.js有没有正常加载,源码里有没有如下片段。
默认启用状态下,在搜索页面会有调取部分资源不成功的情况,比如在头部顶部,先显示不了调取的产品信息问题,如下面的网站情况,顶部导航处直接调取流量产品相关,正常在其他页面都可以显示,就是在搜索页面的非默认语言里,会调取不到。
Enable search in translated languages
使用默认的配置,在ahrefs上的站点检测下会有一些评分的扣分项,就像下面这样,如果像了解更多语言本地化的情况,可以看看谷歌官方的解释和Ahresf的说明。
function add_rel_alternate() { if (is_404()) { return; } $widget_args = $this->widget->create_widget_args($this->get_clean_url()); tp_logger($widget_args, 4); foreach ($widget_args as $lang) { if (!$lang['active']) { echo '<link rel="alternate" hreflang="' . $lang['isocode'] . '" href="'; if ($this->options->full_rel_alternate) { $current_url = ( is_ssl() ? 'https://' : 'http://' ) . transposh_utils::get_clean_server_var('HTTP_HOST') . transposh_utils::get_clean_server_var('REQUEST_URI'); $url = transposh_utils::rewrite_url_lang_param($current_url, $this->home_url, $this->enable_permalinks_rewrite, $lang['isocode'], $this->edit_mode); if ($this->options->is_default_language($lang['isocode'])) { $url = transposh_utils::cleanup_url($url, $this->home_url); } echo $url; } else { echo $lang['url']; } echo '"/>'; } } }修改为两处,去掉判断当前激活的语言(这样就会一股脑的全部调取出来语种的标签),将默认的语种设置为x-default,具体可看修改为:
function add_rel_alternate() { if (is_404()) { return; } $widget_args = $this->widget->create_widget_args($this->get_clean_url()); tp_logger($widget_args, 4); foreach ($widget_args as $lang) { // if (!$lang['active']) { // defaul lang $isocode = $this->options->is_default_language($lang['isocode']) ? 'x-default' : $lang['isocode']; echo '<link rel="alternate" hreflang="' . $isocode . '" href="'; if ($this->options->full_rel_alternate) { $current_url = ( is_ssl() ? 'https://' : 'http://' ) . transposh_utils::get_clean_server_var('HTTP_HOST') . transposh_utils::get_clean_server_var('REQUEST_URI'); $url = transposh_utils::rewrite_url_lang_param($current_url, $this->home_url, $this->enable_permalinks_rewrite, $lang['isocode'], $this->edit_mode); if ($this->options->is_default_language($lang['isocode'])) { $url = transposh_utils::cleanup_url($url, $this->home_url); } echo $url; } else { echo $lang['url']; } echo '"/>'; // } } }