我手动创建了一个文件:test.po,内容如下:
msgstr"问候"
msgstr"Hello World"
现在我可以在编辑器中编辑翻译(hello world),如"poedit"和"GTranslated"(我正在使用Ubuntu).我甚至可以为该翻译添加评论.然而,"poedit"和"GTranslated"都不会让我添加一个新的翻译字符串 - 我在网上看起来没有用,看着其他编辑的截图,似乎没有一个"新"按钮.
我错过了什么?使用"普通"文本编辑器编辑新密钥然后在这些PO编辑器中编辑它们(无论它们可能是什么)似乎很愚蠢.(如果你不能说我是这个'gettext'世界的新手 - 我正在用Zend/PHP构建一个网站.)
我正在尝试通过遵循精彩的Django文档来国际化Django应用程序.问题是当我尝试运行命令来创建语言文件时:
python manage.py makemessages -l fr
Run Code Online (Sandbox Code Playgroud)
它输出一个错误:
CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.
Run Code Online (Sandbox Code Playgroud)
我的配置:
以前您将使用gettext以下内容:
_('Hey {},').format(username)
Run Code Online (Sandbox Code Playgroud)
但是新的Python的f-string怎么样?
f'Hey {username}'
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个完整的i18n gettext()你好世界的例子.我已经使用 G. Mohanty的GNU gettext开始了一个基于本地语言支持的教程的脚本.我正在使用Linux和G ++.
码:
cat >hellogt.cxx <<EOF
// hellogt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
#include <cstdlib>
int main (){
char* cwd = getenv("PWD");
std::cout << "getenv(PWD): " << (cwd?cwd:"NULL") << std::endl;
char* l = getenv("LANG");
std::cout << "getenv(LANG): " << (l?l:"NULL") << std::endl;
char* s = setlocale(LC_ALL, "");
std::cout << "setlocale(): " << (s?s:"NULL") << std::endl;
std::cout << "bindtextdomain(): " << bindtextdomain("hellogt", cwd) << std::endl;
std::cout << "textdomain(): " << …Run Code Online (Sandbox Code Playgroud) 我使用的是CentOS 5.5 Linux(没有X),PHP 5.3和Drupal 7.0.
我网站的核心语言是俄语(不是英语)!
我创建了一个game.info和以下game.module,为首页生成3个块:
function game_block_info() {
return array(
'game_main' => array(
'info' => t('Set FlashVars and show the flash game.'),
'cache' => DRUPAL_NO_CACHE,
),
'game_winner' => array(
'info' => t('Show the winner of the last week.'),
'cache' => DRUPAL_NO_CACHE,
),
'game_leader' => array(
'info' => t('Show the leader of the current week.'),
'cache' => DRUPAL_NO_CACHE,
);
}
function game_block_view($block_name = '') {
global $user;
if ($block_name == 'game_main') {
if (user_is_logged_in()) { …Run Code Online (Sandbox Code Playgroud) 我做了一些研究,发现当字符串被标记为"模糊"时,django翻译不会出现.
但是,我无法找到有关是否可以覆盖此行为的任何文档.
是否有Django设置可用于允许Django (或gettext)使用"模糊翻译"?
我知道很多自动翻译并不完美,但这是用于开源产品的演示,开发和测试.
我宁愿用户能够使用他们自己的语言开发"近似"翻译,然后将其用作激励,以便随时检查它们.
我需要安装0.15或更高版本的GNU的gettext,以便我可以使用django的一些i18n feateres.
我已下载:
来自https://www.gnu.org/software/gettext/
但是我不知道如何安装它,他们的网站上没有安装指南.我该如何安装?
以下示例适用于使用Apache的Mac OS X,即我将已翻译的字符串回显.但是在使用lighttpd的Ubuntu上,我得到原始文本"非活动帐户".我已经尝试了各种各样的环境varialbes组合而没有任何运气.它不是文件权限,因为我可以回显.mo文件的内容.
<?php
//$locale = 'sv_SE.UTF-8';
$locale = 'sv_SE';
$dir = dirname(__FILE__);
// File permission is apparantly not a problem as this works...
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo');
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL=$locale");
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
setlocale(LC_MESSAGES, $locale);
//setlocale(LANG, $locale);
//setlocale(LANGUAGE, $locale);
bindtextdomain('flattr', $dir);
//bind_textdomain_codeset("flattr", 'UTF-8');
textdomain('flattr');
echo _("Inactive account");
?>
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
我有一个django项目,它使用一个向用户发送电子邮件的工作进程.工作进程侦听rabbitmq服务器并获取有关要发送的电子邮件,模板变量,要发送到的电子邮件地址等的所有详细信息.电子邮件正文使用django templates和render_to_string创建.
但是我想把这个国际化.我们的一些用户将使用英语网站,其中一些使用其他语言.他们应该用他们的语言收到电子邮件.我试图使用电子邮件工作进程(使用django.utils.translations.ugettext/ugettext_lazy),以便电子邮件主题和电子邮件正文具有_(...)或{%blocktrans%} resp.
但是,由于电子邮件是在不同的后台工作进程中呈现和发送的,因此正常的django语言检测过程似乎不适用.它没有用户会话,没有cookie或没有http标头可供查看.将消息发送到rabbitmq服务器时,我可以存储语言代码
但是我如何告诉django/gettext在某一点上使用该语言.
例如,我发送电子邮件的函数可能如下所示:
def send_email(details):
lang = details['lang']
name = details['name']
email_address = details['email_address']
switch_gettext_to_this_language_what_goes_here(lang):
# ?????
email_subject = _("Welcome to $SITE")
Run Code Online (Sandbox Code Playgroud)
如何将django translations/gettext切换为特定的语言代码以便_()使用该语言代码?
我已经有了以下内容
[attr]POFILE merge=merge-po-files
locale/*.po POFILE
Run Code Online (Sandbox Code Playgroud)
在.gitattributes同一个本地化文件(例如locale/en.po)已经在并行分支中修改时,我希望合并分支以正常工作.我目前正在使用以下合并驱动程序:
#!/bin/bash
# git merge driver for .PO files (gettext localizations)
# Install:
# git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"
LOCAL="${1}._LOCAL_"
BASE="${2}._BASE_"
REMOTE="${3}._REMOTE_"
# rename to bit more meaningful filenames to get better conflict results
cp "${1}" "$LOCAL"
cp "${2}" "$BASE"
cp "${3}" "$REMOTE"
# merge files and overwrite local file with the result
msgcat "$LOCAL" "$BASE" "$REMOTE" -o "${1}" || exit 1
# cleanup
rm -f "$LOCAL" "$BASE" "$REMOTE" …Run Code Online (Sandbox Code Playgroud)