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)“
brew安装gettext
brew链接获取文本--force
对于Mac用户,如@Louis Barranqueiro所说,在安装Homebrew和gettext之后(步骤1和2):
/usr/bin/ruby-e“$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)“
brew安装gettext
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