• 第一个GTK程序:中国农历 之四


    处理gettext与多国语言,我们先需要在configure.ac中增加一个AM_GNU_GETTEXT宏,如下

    # Checks for programs.
    AC_PROG_CXX
    AC_PROG_CC
    AC_PROG_MAKE_SET
    
    AM_GNU_GETTEXT([external])

    定义了external就不需要在当前目录下面有intl目录了,当然intl目录也是可以通过AM_GNU_GETTEXT_INTL_SUBDIR来指定另外名称的

    然后我们执行gettextize生成config.rpath以及po/m4目录下面的文件。同时会往configure.ac的AC_CONFIG_FILES中增加一个输出po/Makefile.in

    执行此命令时,带参数--symlink就是链接到系统中而不是拷贝到本地

    当前版本的gettextize会提示下一步需要做些什么事情,最关键的是在po目录下面将一个Makevars.template拷贝为Makevars,内容是不需要修改的

    由于glade-2中使用的gettext宏是GET_PACKAGE,因此,我们在configure.ac中增加定义

    GETTEXT_PACKAGE=lunarcalendar
    AC_SUBST(GETTEXT_PACKAGE)
    AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                       [GETTEXT lunarcalendar])

    做完这些操作之后,我们需要再执行autogen.sh脚本,然后再执行configure,再调用make程序

    此时的全部代码打包:lunarcalendar.0.0.3.zip

    这时候,编译后会在po目录下生成lunarcalendar.pot文件,基于此文件,我们可以对源代码的字符串进行翻译

    比如,我们翻译出一个zh_CN.po文件

    # SOME DESCRIPTIVE TITLE.
    # Copyright (C) YEAR Free Software Foundation, Inc.
    # This file is distributed under the same license as the PACKAGE package.
    # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: lunarcalendar 0.1\n"
    "Report-Msgid-Bugs-To: eagle_xmw@yahoo.com.cn\n"
    "POT-Creation-Date: 2013-04-21 03:02+0800\n"
    "PO-Revision-Date: 2013-04-21 03:07+0800\n"
    "Last-Translator: \n"
    "Language-Team: LANGUAGE <eagle_xmw@yahoo.com.cn>\n"
    "Language: \n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    
    
    #: src/interface.c:39
    msgid "Lunar Calendar"
    msgstr "中国农历"
    
    #: src/support.c:90
    #: src/support.c:114
    #, c-format
    msgid "Couldn't find pixmap file: %s"
    msgstr "无法打开图片文件: %s"

    然后,我们还要再在po目录下创建一个LINGUAS文件,文件的内容只有一行"zh_CN"

    再调用autogen.sh重新生成Makefile等之后,再调用configure及make,就可以将刚才增加的zh_CN.po自动编译为zh_CN.gmo了

    此时的全部代码打包:lunarcalendar.0.0.4.zip

    至此,我们的工程是可以编译、链接,也可以安装了,下一步是生成.desktop文件

  • 相关阅读:
    Laravel框架中的event事件操作
    PHP魔术方法实例
    PHP 面向对象
    ThinkPHP中where()使用方法详解
    PHP常见错误提示含义解释
    php面向对象编程self和static的区别
    php文件路径获取文件名
    php三种无限分类
    php高精度计算问题
    转:JavaScript定时机制、以及浏览器渲染机制 浅谈
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/3033424.html
Copyright © 2020-2023  润新知