Python django i18n:确保您有GNU gettext工具

Python django i18n:确保您有GNU gettext工具,python,django,Python,Django,我尝试了django-admin.py makemessages-l zh_CN,但出现错误: CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed. 使用brew安装gettext后,它仍然出错。 我需要做点什么吗?这是我的终端截图 请引导我,谢谢 brew的输出中暗示了问题 它已经安装了GNU gettext,但没有将其链接到您的bin目录,因为OSX已经

我尝试了
django-admin.py makemessages-l zh_CN
,但出现错误:

CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
使用brew安装gettext后,它仍然出错。
我需要做点什么吗?这是我的终端截图
请引导我,谢谢


brew的输出中暗示了问题

它已经安装了GNU gettext,但没有将其链接到您的bin目录,因为OSX已经提供了不同版本的gettext

因此Django不知道如何运行从brew安装的版本


显然,brew在这里过于谨慎,您应该将其链接起来。

这一过程对我很有效。(OSX 10.11.2-python v3.5和Django 1.8) 它应该与您的配置一起工作

使用终端使用自制软件安装gettext GNU工具

  • 安装:
    /usr/bin/ruby-e“$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)“
  • 安装GNU gettext:
    brew安装gettext
  • 创建符号链接:
    brew链接获取文本--force

  • 对于Mac用户,如@Louis Barranqueiro所说,在安装Homebrew和gettext之后(步骤1和2):

  • 安装:
    /usr/bin/ruby-e“$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)“
  • 安装GNU gettext:
    brew安装gettext
  • 在第3步中,不应使用
    brew链接gettext--force
    ,因为这有风险(如brew建议的那样)。更好的解决方法是为虚拟环境设置一个新的
    路径变量
    。因此,在虚拟环境文件夹的bin文件夹中的
    postactivate
    文件中,键入:

    export TEMP_PATH=$PATH
    export PATH=$PATH:/usr/local/Cellar/gettext/0.19.7/bin
    
    请注意,您必须将
    0.19.7
    替换为安装在计算机中的版本

    predeactivate
    文件中,该文件位于
    postactivate
    文件的同一文件夹中,键入:

    export PATH=$TEMP_PATH
    unset TEMP_PATH
    
    现在您可以放心地使用
    python manage.py makemessages-l
    。)

    干杯。

    在Ubuntu中:

    $ sudo apt-get install gettext
    

    如果您使用fish shell,另一种方法是将此路径添加到
    $fish\u user\u paths
    。此变量在
    $path
    前面,因此您不必在所有项目中设置它

    可以使用以下命令行执行此操作:

    set -U fish_user_paths /usr/local/Cellar/gettext/0.19.8.1/bin $fish_user_paths
    
    记住用您的
    gettext
    版本替换
    0.19.8.1

    这将
    $fish\u user\u path
    设置为通用变量。以下是
    help
    关于通用变量的说明:

    通用变量是其值在所有变量之间共享的变量 fish的实例,无论是现在还是将来——即使在重新启动之后。你 可以使用
    set-U使变量通用


    因此,在shell中设置此变量一次(无需在配置文件中设置)将在注销或重新启动后保存此变量。

    此解决方案对我有效(win.7、8和10)

    您需要下载两个文件夹:

    • gettext-runtime_0.18.1.1-2_win32
    • gettext-tools-dev_0.18.1.1-2_win32
    你可以找到他们

    • 下载后,将其解压缩,并将两个文件夹的bin文件目录添加到电脑的系统变量
      PATH

    • 您还需要一个名为libstdc++-6.dll的文件从中下载并将其放置在系统目录中。您将在系统目录中找到足够的详细信息

    就这样。希望它对您有用。

    为我解决了这个问题-不涉及系统文件

    复制并运行以下各项:

    brew install gettext
    GETTEXT_PATH="/usr/local/Cellar/gettext/0.19.8.1/bin"
    FILE="venv/bin/activate"
    echo "" >> $FILE
    echo "export PATH=\$PATH:$GETTEXT_PATH" >> $FILE
    source venv/bin/activate
    
  • GETTEXT\u PATH=“/usr/local/ceral/GETTEXT/0.19.8.1/bin”
    将GETTEXT\u路径存储在shell变量中-根据
    brew安装GETTEXT的内容调整版本号
  • FILE=“venv/bin/activate”
    存储到venv shell脚本的路径
  • echo”“>$FILE
    在末尾添加一个空行,以确保下一个命令位于其自己的行上
  • echo“export PATH=\$PATH:$GETTEXT\u PATH”>>$FILE
    向venv shell脚本添加命令;此命令将gettext二进制文件的路径添加到全局
    $path
    变量中,以便在操作系统二进制文件之前使用它们
  • 源venv/bin/activate
    运行venv外壳脚本,以便正确设置变量。您可以多次运行此命令

  • 首先,请确保您的虚拟环境不在根文件夹中。我认为最好将虚拟环境保留在根文件夹之外。显然,请确保您的环境已激活。当然,还要确保安装了gettext

    如果您的env文件夹位于根文件夹中

    要测试这一点,请确保在所有模板中添加{%load i18n%},选择一个模板并执行以下操作:

    <h1>{% trans 'My Test to be translated' %}</h1>
    
    (请确保将您的虚拟环境替换为虚拟环境的名称

    运行上述命令后,您应该在终端中获得该命令

    处理区域设置zh_CN

    现在您应该有这样一个区域设置文件夹:
    locale/cn/LC\u MESSAGES/django.po

    现在您需要编译这些消息

    django-admin makemessages -l 'zh_CN' -i your_venv
    
    django-admin compilemessages
    
    在您的locale文件夹中,现在您应该可以看到django.mo文件,但您会注意到django.po文件中的差异。只需在其中添加翻译,您可以通过将您的en语言设置为language_CODE='zh_CN'再次测试,然后只需刷新并测试h1字符串将被翻译为中文

    为了使上述内容在您的settings.py中发挥作用,请确保您在此处有此项,目前最重要的是区域设置路径,但请检查此('zh\u CN','uu'Chinese'),是否正确

    LANGUAGES = [
       ('zh_CN', _('Chinese')),
       ('en', _('English')),
    ]
    
    LANGUAGE_CODE = 'en-us'
    
    
    TIME_ZONE = 'UTC'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    LOCALE_PATHS = [
        os.path.join(BASE_DIR, 'locale'),
    ]
    
    在这个回答中,最重要的部分是了解虚拟环境的位置
    apt-get update
    
    apt-get install gettext