PHP使用gettext实现i18n (internationalization)国际化

i18n是英文单词internationalization的首字母”i”和末字母”n”的缩写,中间的18代表省略(缩写)了18个字母。

gettext是PHP的一个函数库,主要函数有

  • bind_textdomain_codeset
  • bindtextdomain
  • gettext
  • textdomain
  • dgettext
  • ……

我们首先要先搞明白一些概念,就能很容易的理解这些函数了。

  • .po文件

    把英文内容翻译成本地内容的文件,文件格式:

    msgid "英文内容"
    msgstr "本地内容"
    

    比如:

    msgid "hello, world!"
    msgstr "你好,世界!"
    

    这样我们在程序中使用 gettext("hell, world!"),如果设置成显示中文的话就会显示“你好,世界!”,英文的话就会显示”hello, world!”

  • .mo文件

    .po文件是我们编辑的源文件,就像我们写的代码一样,.mo文件是编译过的二进制文件,gettext读取的就是.mo文件,因为程序读取二进制的效率要高一些。

  • 函数中的domain

    domain就是.mo的文件名,一般.po和.mo的文件名是一致的,除了扩展名不样。bindtextdomain的第一个参数就是.mo的文件名, 比如我们要用default.mo文件,那么bindtextdomain第一个参数就是default,第二个参数是default.mo文件的路径。

  • textdomain

    程序中可以设置绑定多个.mo文件,textdomain是设置默认的.mo文件,比如设置default.mo文件为默认 textdomain('default')之后 就可以使用gettext函数来实现多语言了。

  • dgettext

    上面我们知道gettext函数使用的是默认的.mo文件,那么dgettext函数就是指定.mo文件,二个参数,第一个是.mo文件名,第二个参数同gettext函数的第一个参数一样。

  • bind_textdomain_codeset

    指定.mo文件的编码,一般我们使用utf-8,就需要调用这个bind_textdomain_codeset,你的.po文件是utf-8,那么.mo文件也是utf-8,二个文件会保持一致, 不指定编码的话使用gettext或者dgettext就会是乱码。

  • poedit编辑器

    poedit就是专门编辑.po文件的编辑器软件,他只能翻译内容,不能添加内容。

  • 目录结构

    对于.mo文件是的位置是有一定要求的,比如我们想把.mo文件统一放在./locale目录,可以使用函数 bindtextdomain('default', './locale'); 来设置, 那么我们的中文default.mo文件的位置必须是 ./locale/zh_CN/LC_MESSAGES/default.mo ,zh_CN是中文,LC_MESSAGES是固定的,为什么要有他我也不清楚。

  • setlocale函数

    这个函数是语言切换的核心,比如上面我们有一个中文的翻译文件default.mo保存在zh_CN目录下面,我们只需要调用 setlocale(LC_ALL, 'zh_CN');  即可显示我们在default.mo翻译过的内容。关于第一个参数可以查看php setlocale的文档,这里就不说了。

还有什么问题不明白的可以通过评论告诉我哦。

openSUSE 12.1升级到openSUSE 12.2

不管你是用界面升级还是用命令行升级,都需要以下几个步骤:

  1. 禁用目前12.1的源
  2. 添加12.2的源
  3. 执行升级

下面就说一下使用命令行升级的过程,因为我使用的这这种方式

  1. 禁用当前的源

    zypper modifyrepo --all --disable
    
  2. 添加12.2的源

    zypper addrepo --name "openSUSE-12.2 OSS" http://download.opensuse.org/distribution/12.2/repo/oss/ repo-12.2-oss
    zypper addrepo --name "openSUSE-12.2 Non-OSS" http://download.opensuse.org/distribution/12.2/repo/non-oss/ repo-12.2-non-oss
    zypper addrepo --name "openSUSE-12.2 Updates" http://download.opensuse.org/update/12.2/ repo-12.2-update
    
  3. 执行系统升级

    zypper ref
    zypper dup
    

升级之后我的google-chrome打不开了,重新安装一下解决,其它没有问题。

openSUSE 12.2 已发布

亲爱的用户,开发者和各界极客们 – openSUSE 12.2 为您准备好了! 两个月额外的稳频工作打造了一个恒星级的发行版,精彩频频,稳健如一!

openSUSE 最新版,世界上最强大最灵活的 Linux 发行版通过 Linux 3.4 的快速存储层和 glibc 与 qt 中的加速函数为您带来了 全线加速,如雨丝般平滑的桌面,风驰电掣般的响应速度!基础架构的进化带来了 新的成熟技术 如 GRUB2 和 Plymouth,并向改进和简化的 UNIX 文件系统结构迈出了第一步。用户还会为无处不在的 已有特性打磨 带来的感觉所惊艳。新兴的 Btrfs 文件系统带来了改进的错误处理和恢复工具;飞速发展的 GNOME 3.4 带来了所有程序的平滑滚动和重制的系统设置与联系人管理;XFCE 带来了增强的应用程序查找器。

“我们为此版本的 openSUSE 自豪,我们恪守了 openSUSE 一贯的高质量体系。”—— openSUSE 董事会的安德鲁·瓦法说。“我们过去两年的增长造成的发布周期上的延迟意味着我们必须进行一些扩容。现在 12.2 已经发布了。”

  • 性能

从内核到桌面,openSUSE 12.2 都实现了提速:Linux 3.4 有了一个快速存储层来防止大量传输时的阻塞。glibc 2.15 基础库改进了许多函数的性能,尤其是在 64 位机器上表现更好。Systemd 44 启用了快速引导。并且基于 Qt 4.8.1 编译的 KDE 4.8.4 让桌面响应更快。

  • 进化

openSUSE 采用成熟应用程序的最新版来构建 Linux 发行版。GRUB2 引导加载器 目前设为默认,可执行包目前位于 /usr/bin,引导和关机时, Plymouth 0.8.6.1 提供了无闪烁的切换和动人的动画。

  • 打磨

GNOME 3.4 引入针对所有程序的平滑滚动,重制的系统设置应用和美化的联系人管理器。XFCE 4.10 改进了应用程序查找器,也允许了垂直面板。Dolphin 文件管理器更漂亮更快了。

  • 创新

XOrg 1.12 引入了多点触摸输入设备和多点部署。谋智火狐 14 支持了最新的网络技术。 llvmpipe 软件 3D 渲染器在即使没有 3D 硬件的情况下对 Gnome Shell 和虚拟机也实现了混成。GIMP 2.8 和 Krita 2.4 让图片处理和原生多媒体绘画能够与商业工具相媲美。Tomahawk 播放器 使您听音乐也能与朋友互动。

  • 稳定

LibreOffice 3.5 继续精炼自由办公套件体验,提供了许多新功能和改进。KDE 4.8.4 的电子邮件和日历应用改进了稳定性,下一代 btrfs 文件系统 也改进了错误处理和提供了恢复工具。

  • 管理

3.4 内核现允许设定整个进程组的 CPU 使用率上限。新版 systemd 提供了一个看门狗功能,能够监视控制下的服务,还提供了一个新的进程管理工具。系统管理员也能从这套新的 数字取证/事故响应 工具中获益。

  • 新奇

一系列重量级科学工具为 openSUSE 提供了诸如数字计算,绘图和可视化数学应用程序。Stellarium 天文模拟器让您不用望远镜就能探索夜空。程序员们得到了 1.0.2 版的谷歌 Go 语言,和 GCC 4.7.1 与 Qt Creator 2.5 带来的最新 C++ 语言标准。

在这些技术革新之外,文档组对参考手册做出了重要修订,并引入了让社区贡献者更容易参与 openSUSE 文档撰写的设施。

支持和发布

依旧,此版本将在至少两个发布周期 + 两个月内提供支持。目前,openSUSE 12.3 的计划周期是 6 个月,由于 12.2 发布推迟了两个月。由于项目目前正在 重新思考它的工程和发布环节,该计划未来可能有变。

opensuse 12.1 安装sun java

opensuse 12.1默认只有openjdk (可能是因为版权的问题吧),也不像ubuntu发行版openjdk和sun java都带的有,可以自己切换。

首先到sun java网站下载sub java jre,下载地址 http://www.java.com/en/download/manual.jsp

如果你使用的是32位opensuse,那么就下载Linux RPM,64位的话Linux x64 RPM

下载完成之后在终端(Terminal)下执行

安装sun java

rpm -iv 下载的文件路径

安装update-alternatives

cnf update-alternatives

把sun java添加到update-alternatives管理

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/java/jre1.7.0_07/bin/java" 40

选择你要使用的java

sudo update-alternatives --config java