Drupal 实现多语言站点的方法

javascript实现方法

Drupal 的架构是完全面向多语言的,连Javascript也例外。

首先我们来看看Drupal中Javascript是怎么使用的。

Drupal.t('string')
其中string为Drupal需要在需要翻译的多语言字符串。

Drupal Javascript 实现多语言机制
第一步,Drupal 中所有的Javascript文件都会通过drupal_add_js() function 来加载,仅限type为file的JS文件。

第二步,Drupal加载完所有Javascript文件后,并在render之前,可以通过hook_js_alter钩子来查看Javascript,遍历JS中的Drupal.t 和 Drupal.formatPlural。

第三步,解析完JS文件中的变量后,直接插入数据库locales_source中,可以在后台进行翻译工作。

第四步,全部解析过的JS文件变量存到variables变量javascript_parsed中,并在public文件夹中生成Drupal多语言的language JS文件,并将其加入到header中。

第五步,修改任何JS文件中的多语言变量后,需要rebuilt整个JS缓存,然后重新找到新变量,插入数据库。

注意事项:

出于Drupal性能原因,Drupal会解析JS文件并生成缓存。所以,当您添加或更改一个js文件中的字符串,你必须清除缓存Drupal才能重新找到这个新的字符串,并使其可用于翻译。
Drupal不会自动提取加密过的JS文件。出于这个原因,模块作者应该只包括其JS文件解压后的版本。 Drupal的JS压缩功能反正会把这些文件压缩后生成一个版本。
JS文件中定义的多语言string可以通过后台translate 翻译自动找到(提前清空所有缓存),然后手动通过po文件导入或者在后台执行翻译成其他语言。
Drupal Javascript 使用多语言例子

var comments = Drupal.t('Comments');
var commentsOnType = Drupal.t('Comments to @type posts', {'@type': typeName});
var commentCount = Drupal.formatPlural(count, '1 comment', '@count comments');
var commentCountOnType = Drupal.formatPlural(count, '1 comment on @type posts', '@count comments on @type posts', {'@type': typeName});

OK,总结完了,希望你可以顺利实现JS的多语言网站。

另外清空缓存时,最好配备Drush工具,直接drush cc all 就搞定了。

本文的技术范围可以在Drupal6,Drupal7,Drupal8中实现。

方法二,使用站长配置

Drupal 6中包含了Content Translation模块,该模块允许网站内容翻译成不同语言,它和本地化模块 (Locale模块,负责管理多语言,并提供多语言网站翻译接口)协同工作,它是创建和维护多语言内容站点的关键。Drupal默认并没有开启该模块功能,要正确开启该模块功能,需要进行以下操作:

  1. 在站点构建中的模块管理中启用“Content translation”模块,如果安装列i18n模块,建议同时启用“Content type translation”模块;
  2. 在“权限”配置页面权限给适当的用户角色分配“翻译内容”权限;
  3. “语言”的配置页面中新增并启用的所需要的语言;
  4. 在管理->内容管理->内容类型页面中,点击要支持多语言功能的内容类型(例如:Page和Story)右侧的“编辑”按钮,然后在“流程设置”折叠框中的“多语言支持”选中“启用,与翻译一起”。

这样在创建或者编辑文章的时候会出现一个语言下拉框和翻译链接,如下图:

点击“翻译”链接进入翻译查看页面可以看到如下页面:

点击旁边“添加翻译”链接或者“编辑”页面就可以进入其他语言内容编辑页面了。

时间: 2025-01-25 05:25:42

Drupal 实现多语言站点的方法的相关文章

win8系统下找回语言栏的方法

  在windows系统下,任务栏中都包含有语言栏,该语言栏能够让我们快速的切换输入法以及对语言进行设置调整,虽然现在很多用户会直接通过快捷键调整输入法状态,不过还是有些新手用户会选项使用语言栏进行调整,如果在win8系统下语言栏从任务栏下消失,有极大的可能是因为用户对系统进行误操作造成了语言栏隐藏了,对于出现这类问题的用户,我们可通过下方小编为大家提供的方法进行找回! win8系统下找回语言栏的方法 1.在键盘上同时按下"Win+X"组合键呼出系统快捷菜单,然后点击"控制面

javascript判断并获取注册表中可信任站点的方法

  本文实例讲述了javascript判断并获取注册表中可信任站点的方法.分享给大家供大家参考.具体分析如下: 判断可信任站点,首先要在注册表中找到可信任站点在注册表中的位置,如下: (1)域名作为可信任站点在注册表中的位置: HKCUSoftwareMicrosoftWindowsCurrentVersionInternetSettingsZoneMapDomains (2)IP作为可信任站点在注册表中的位置: HKCUSoftwareMicrosoftWindowsCurrentVersio

Go语言中的方法定义用法分析_Golang

本文实例讲述了Go语言中的方法定义.分享给大家供大家参考.具体分析如下: 事实上,可以对包中的任意类型定义任意方法,而不仅仅是结构体. 不能对来自其他包的类型或基础类型定义方法. 复制代码 代码如下: package main import (     "fmt"     "math" ) type MyFloat float64 func (f MyFloat) Abs() float64 {     if f < 0 {         return fl

Thinkphp搭建包括JS多语言的多语言项目实现方法_php实例

本文实例讲述了Thinkphp搭建包括JS多语言的多语言项目实现方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 项目需要开发英文版,于是需要搭建多语言项目. 项目使用Thinkphp框架,隐约记得Thinkphp有多语言设置,翻看了帮助手册,果然有,这就边实验边开始: 二.实现方法: Thinkphp采用app_begain来检测和切换语言包,语言包和项目相关,构架等都比较简单,具体的这里:http://www.thinkphp.cn/info/188.html 搭建好了,就可以使用

几种语言的注释方法

C/C++以及JAVA 行注释://注释内容 多行注释:/*注释内容*/ Python 行注释:#注释内容 多行注释:Python并没有提供多行注释的语法. 目前常用替代除了编辑器处理外,就是采用: "'注释内容"'或者"""注释内容""",其实三个引号代表的是多行字符串,之所以用来注释,是因为引号里的字符串不会作为命令执行,并且支持多行.但是需要注意在一个类里这么注释时可能引起的缩进的错误,因为它毕竟不是规定的注释. Bas

javascript判断并获取注册表中可信任站点的方法_javascript技巧

本文实例讲述了javascript判断并获取注册表中可信任站点的方法.分享给大家供大家参考.具体分析如下: 判断可信任站点,首先要在注册表中找到可信任站点在注册表中的位置,如下: (1)域名作为可信任站点在注册表中的位置:  HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\InternetSettings\\ZoneMap\\Domains\\ (2)IP作为可信任站点在注册表中的位置:  HKCU\\Software\\Microsoft

thinkPHP多语言切换设置方法详解_php实例

本文实例讲述了thinkPHP多语言切换设置方法.分享给大家供大家参考,具体如下: thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为本人的经验有限,姑且认为tp的多语言设置必须的先初始化tp的CheckLangBehavior.class.php 怎么初始化CheckLangBehavior.class.php呢?下面进行讲解. tp框架下面,所

php-修改drupal网页上的站点图标遇到的问题?

问题描述 修改drupal网页上的站点图标遇到的问题? 更换了/misc目录下的favicon.ico,把它换成自定义的图标(图标名没有改变),然后刷新网页和清空缓存,网页上还是显示原来的图标,但是站点上已经没有那个图标了,不知他从那显示的? 解决方案 看看本地缓存是否清理,本地缓存也会影响起效果 解决方案二: 看看本地缓存是否清理,本地缓存也会影响起效果

Go语言中的方法、接口和嵌入类型详解_Golang

概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 1.编译器会因为我们同时有两个接口实现而报错吗? 2.如果编译器接受这样的定义,那么当接口调用时编译器要怎么确定该使用哪个实现? 在写了一些测试代码并认真深入的读了一下标准之后,我发现了一些有意思的东西,而且觉得很有必要分享出来,那么让我们先从 Go 语言中的方法开始说起. 方法 Go 语言中同时有函数和方法.一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的