2010-02-08 71 views
4

如何在bash脚本中使用gettext?在bash中使用gettext

我只找到这个网页,但我不明白。

Localization

我的剧本是这样写的:

#!/bin/bash 
. lang_file.sh 
echo $LANG_HELLO_WORLD 

而且lang_file.sh看起来像:

#!/bin/bash 
LANG_HELLO_WORLD="Hello World" 

我想用gettext的改变lang_file.sh的东西,像这样:

#!/bin/bash 
LANG_HELLO_WORLD=`some gettext command to get string in user language` 

我想使用Launchpad中的代码,所以其他用户可以翻译它(.po,.pot文件)

对不起,英语有什么建议吗?

回答

0

你在做什么是我想用适当的语言问用户?你可能会希望用户先选择语言。你所要求的另一部分就是在你的变量中嵌入像$(get_some_str_func)这样的命令。

我没有写这段代码,但它可能是你想要做的事情?我不确定,我完全不明白你在问什么。

function _configure_locale() { # [profile] 
     local profile=${1:-EN} 
     case ${profile} in 
      DE|DE_DE|de_DE) 
       LC_ALL="de_DE.UTF-8" 
       LANG="de_DE.UTF-8" 
       LANGUAGE="de_DE:de:en_US:en" 
       ;; 
      EN|EN_US|en|en_US) 
       LC_ALL="en_US.UTF-8" 
       LANG="en_US.UTF-8" 
       LANGUAGE="en_US:en" 
       ;; 
      *) 
       echo "ALERT" "${FUNCNAME}: unknown profile '${profile}'" 
       ;; 
      esac 
      LC_PAPER="de_DE.UTF-8"; # independent from locale 
      LESSCHARSET="utf-8"; # independent from locale 
      MM_CHARSET="utf-8"  # independent from locale 
      echo "locale settings" "${LANG}"; 
      export LC_ALL LANG LANGUAGE LC_PAPER LESSCHARSET MM_CHARSET 
    } 
+3

只用了4年,该死的 – lauriys 2014-06-06 19:41:20

2

您需要瓶坯以下步骤:

  1. 确定什么是您的项目名称,gettext的称之为textdomain,你会需要它来检索翻译项目。我们称之为“PRJ”。
  2. 标记要翻译的字符串。下面的代码片段给出了例子:

(姑且称之为PRJ.sh

#!/bin/sh 
alias GETTEXT='gettext "PRJ"' 

## Use GETTEXT to mark the string you want to translate 
HELLO_WORLD=$(GETTEXT "Hello world") 

echo "$HELLO_WORLD" 
  • 农产品.POT文件,以便翻译人员进行这项工作。
  • 运行以下命令,它只查找GETTEXT,即您实际想要转换的那些。

    xgettext -o PRJ.pot -L Shell --keyword --keyword=GETTEXT PRJ.sh 
    
  • (可选)生成.po文件。
  • 对于您想要覆盖的每个语言环境。

    msginit -i PRJ.pot -l fr.UTF-8 
    

    注意, “UTF-8” sugggested,否则msginit可能会错误地选择适合你一些过时的编码。

    1. 检索完成的.po文件,并将其转换为。莫文件

    (在该机器能读它文件)

    msgfmt -v fr.po -o fr.mo 
    
  • 安装的.mo文件
  • 执行命令

    sudo install fr.mo /usr/share/locale/fr/LC_MESSAGES/PRJ.mo 
    

    现在你可以试试结果:

    LANGUAGE=fr ./PRJ.sh 
    

    你应该会看到法语翻译为Hello world。

    1

    在bash中存在一个久而久之,从未记录和几乎不赞成的内置解决方案。

    LANG=foo_BAR.utf8 
    TEXTDOMAIN="test" 
    TEXTDOMAINDIR="/usr/share/locale" 
    echo $"fooMsgid" 
    # bash --dump-op-strings <scriptfile>