标签: gettext

python gettext错误:无法隐式地将'__proxy__'对象转换为str

我突然在以前工作的代码中遇到了一个奇怪的错误.我最近从1.9.4升级到Django 1.9.6.

在我的一个观点中,我有:

from django.contrib import messages
from django.utils.translation import ugettext_lazy as _

messages.success(request, str( _('A string with a ') +
    '<a target="_blank" href="/preview/' + mymodel.hash + '">' +
    _('link!') + '</a>.'), extra_tags="safehtml"
    )
Run Code Online (Sandbox Code Playgroud)

这现在给出了TypeError最后一行的第二行:

Can't convert '__proxy__' object to str implicitly
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决?

编辑:

这可以通过将第二个调用包装到ugettext_lazy()in中来解决str()(即代码变为str( _('link!') ).这样做可以使视图呈现正常.现在我的问题是:为什么?整个复合字符串已经包含在内str(),正如我所说,这段代码与之前版本的django一起工作得很好.这是一个错误吗?

python django gettext

9
推荐指数
1
解决办法
2114
查看次数

关于语言文件的gettext有什么好处?

在用PHP制作多语言应用程序时,每个人都说gettext是最好的方法.我只是想知道为什么?

就像下面的方法一样,使用gettext效率更低?

<?PHP
//Have seperate language files for each language I add, this would be english file
function lang($phrase){
    static $lang = array(
        'NO_PHOTO' => 'No photo\'s available',
        'NEW_MEMBER' => 'This user is new'
    );
    return $lang[$phrase];
}
//Then in application where there is text from the site and not from users I would do something like this
echo lang('NO_PHOTO');  // No photo's available would show here
?>
Run Code Online (Sandbox Code Playgroud)

php gettext

8
推荐指数
2
解决办法
3250
查看次数

隐瞒xgettext?

如何.po使用xgettext使用带有单个命令的PHP文件递归编译文件?

我的PHP文件存在于层次结构中,直接xgettext命令似乎没有递归地挖掘.

php gettext xgettext

8
推荐指数
3
解决办法
6406
查看次数

用两个复数词来国际化句子

使用gettext如何使具有多个数字变量的句子可以翻译?ngettext只接受一个数字作为复数参数.

以下句子中应允许的排列是"成人和儿童","成人和儿童","成人和儿童"以及"成人和儿童".

"从#AVAILABILITYFROM到#NUMADULTS成人和#NUMCHILDREN孩子的#AVAILABILITYTO"

gettext internationalization plural

8
推荐指数
1
解决办法
1594
查看次数

通过Babel国际化Python 2.6应用程序

我们正在评估Windows下的Babel 0.9.5 [1]与Python 2.6一起使用,并提出以下问题,我们通过阅读文档或谷歌搜索无法回答这些问题.

1)我想对ungettext使用_ like缩写.关于是否应该使用n_或N_,是否存在一个概念?

n_似乎不起作用.Babel不提取文本.

N_似乎部分有效.Babel像gettext一样提取文本,但不为ngettext格式化(缺少复数参数和msgstr [n].)

2)有没有办法在创建POT文件时设置如下的初始msgstr字段?

我怀疑有可能通过Babel cfg文件来实现这一点,但我一直无法找到有关Babel cfg文件格式的文档.

"Project-Id-Version:PROJECT VERSION \n""Language-Team:en_US \n"

3)有没有办法在我们的PO文件中保留"过时的"msgid/msgstr?当我使用Babel update命令时,新创建的过时字符串标有#〜前缀,但现有的过时消息字符串会被删除.

谢谢,马尔科姆

[1] http://babel.edgewall.org/

python translation gettext internationalization babel

8
推荐指数
1
解决办法
1431
查看次数

PoEdit关键字 - 复数

我在我的应用程序中加入了类似gettext的本地化系统,但我的翻译功能如下所示:

 t($category, $string, [$plural_string, $number, $vprintf_arguments])
Run Code Online (Sandbox Code Playgroud)

我的PoEdit关键字:

t:2
t:2,3
Run Code Online (Sandbox Code Playgroud)
  • t:2告诉PoEdit解析$string,它显然有效
  • t:2,3应该告诉PoEdit解析两者$string而且$plural_string- 但它不是:(

它只能看到$string,所以我没有得到解析的复数形式......我该如何解决?我不想将我的函数切换到不同的参数格式,因为我喜欢这个:(

此功能也像sprintf替换:

  • 如果第三个参数($ plural_string)是一个数组,那么该函数会将数组中的值视为vsprintf的参数
  • 如果第三个参数是一个字符串并且提供了$ number,则该函数将$ vprintf_arguments视为vsprintf的参数(如果提供),并将$ plural_string视为$ string的复数形式

无论如何,PoEdit不应该干扰非引用的论点,对吧?我的意思是它只会解析$ plural_string作为字符串'abc abc'

php localization gettext poedit xgettext

8
推荐指数
1
解决办法
2924
查看次数

WebDriver getText抛出异常

好吧,我完全无能为力:我在页面上有表格,其中每行的CSS ID增加1.我正在这样的表格中搜索拍卖ID,并将其与我之前通过Selenium测试输入的拍卖相匹配.所以我的代码是这样的:

    int i = 0;
    Boolean stillHaveSomethingToSearch = true;
    Boolean foundit = false;

    while (stillHaveSomethingToSearch){
        idConstructor = "mainForm:aucPanelId:0:listOfAuctions:"+i;

        try{
            auctionRow = driver.findElement(By.id(idConstructor));
        } catch (NoSuchElementException e){
            stillHaveSomethingToSearch = false;
        }
        if (stillHaveSomethingToSearch) {
           foundAuctionID = auctionRow.getText();
            System.out.println("foundAuctionID = " + foundAuctionID);
           if (auctionID.equals(foundAuctionID)){
               stillHaveSomethingToSearch = false;
               foundit = true;
           }
        }
        i++;
    }
    if (foundit){
        auctionRow.click();
     }
Run Code Online (Sandbox Code Playgroud)

其中"auctionID"通过之前的测试发送到该方法.

auctionRow是以两个跨度表示的Webelement,其中存储了实际的auctionID

  <span id="mainForm:aucPanelId:0:listOfAuctions:0">116</span>
Run Code Online (Sandbox Code Playgroud)

整行是可点击的,所以在我发送click()命令后,它会打开我发现的拍卖

奇怪的是:auctionRow.getText(); 抛出错误.

如果我将其更改为getTagName()函数,它将正确地返回"span"

如何强制它在两个跨度之间提供文本?

Stak Trace:

    org.openqa.selenium.WebDriverException:  (WARNING: The server did not …
Run Code Online (Sandbox Code Playgroud)

java selenium exception webdriver gettext

8
推荐指数
1
解决办法
1791
查看次数

Gettext没有通过php-cli工作,但在php-apache中工作

我运行的代码如下所示:

...
$this->locale = da_DK;
...
putenv("LC_ALL=".$this->locale);
putenv('LANG='.$this->locale);
$res = setlocale(LC_ALL, $this->locale);
if($res != $this->locale){
    throw new Exception("The language could not be set.");
}
bindtextdomain("domain", "./locale");
textdomain("domain");

 echo setlocale(LC_MESSAGES, 0 );
 echo ' ';
 echo __('description');
Run Code Online (Sandbox Code Playgroud)

通过apache2运行它的结果是:

da_DK Beskrivelse
Run Code Online (Sandbox Code Playgroud)

这是我们想要的.

运行它throgh cli:

da_DK Description
Run Code Online (Sandbox Code Playgroud)

如果我们使用英语,那将是正确的.'d'在英语翻译中是大写,在源中是小写(从上下文看起来有点奇怪)

因此gettext可以工作,因为它可以翻译字符串,但不知何故,它忽略了我在脚本中更改了语言环境并从英语目录中选择了.po文件.

如果您想知道我为什么需要cli脚本上的语言环境:该脚本用于通过电子邮件发送发票.

我使用:Ubuntu 12.10,PHP 5.4.6-1ubuntu1,apache 2.2.22和gettext 0.18.1.

php apache locale gettext internationalization

8
推荐指数
1
解决办法
1637
查看次数

无法使用gettext将已翻译的字符串附加到自己身上

以下代码无效

from django.utils.translation import gettext_lazy as _ 

stringtest=_("First string")
stringtest= stringtest + _(" Second string")
print stringtest
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

cannot concatenate 'str' and '__proxy__' objects
Run Code Online (Sandbox Code Playgroud)

是否真的不可能将"翻译"字符串附加到自己身上?

python django gettext

8
推荐指数
3
解决办法
2398
查看次数

未使用变量的单下划线替代方案

在 Python 中,最好对有意未使用的变量使用单个下划线:

first_word, _ = 'only only is important'.split(' ', 1)
Run Code Online (Sandbox Code Playgroud)

另一方面,gettext使用下划线作为其翻译函数的短别名,如果下划线之前用于变量,则会导致冲突:

print(_('gettext will try to translate this string.'))
Run Code Online (Sandbox Code Playgroud)

问题:gettext如果在同一命名空间中使用一次性变量的名称约定是什么?

python naming-conventions gettext

8
推荐指数
0
解决办法
548
查看次数