当前位置: 首页 > 知识库问答 >
问题:

如何将gettext翻译应用于case语句中的字符串文本?

唐经国
2023-03-14

我需要将gettext转换添加到我们代码中的所有字符串文字,但它不适用于case语句中的文字。

此失败的尝试给出语法错误:预期':'

from gettext import gettext as _

direction = input(_('Enter a direction: '))   # <-- This works
match direction:
    case _('north'):                          # <-- This fails         
        adj = 1, 0
    case _('south'):
        adj = -1, 0
    case _('east'):
        adj = 0, 1
    case _('west'):
        adj = 0, -1
    case _:
        raise ValueError(_('Unknown direction'))

错误是什么意思,如何标记方向进行翻译?

共有1个答案

解鸿运
2023-03-14

匹配/case语句的语法将_视为通配符模式。唯一可以接受的标记是冒号。由于您的代码使用了开括号,因此会引发语法错误。

从文字模式(例如case"North":...)切换到值模式(例如casedirections.north:...),该模式使用点运算符。

然后可以在案例陈述之外的上游执行翻译:

from gettext import gettext as _
from types import SimpleNamespace

directions = SimpleNamespace(north=_('north'), south=_('south'),
                             east=_('east'), west=_('west'))

direction = input(_('Enter a direction: '))
match direction:
    case directions.north:
        adj = 1, 0
    case directions.south:
        adj = -1, 0
    case directions.east:
        adj = 0, 1
    case directions.west:
        adj = 0, -1
    case _:
        raise ValueError(_('Unknown direction'))

不仅字符串文字得到翻译,case语句也更具可读性。

 类似资料:
  • 我使用PHP Gettext与. mo文件(使用PoEdit)翻译从法语(fr_FR. UTF-8)到英语(en_US. UTF-8),它的工作原理相当好,但不是所有的字符串都翻译!我不是在说UTF-8没有正确翻译的重音,有些整个字符串没有翻译。 我已经从所有PHP文件中提取了要翻译的法语字符串-u(“stringtotranslate”)-感谢shell脚本: 违约。pot已生成,所有字符串均正

  • 我有一个从xml文档中读取数据的程序。在这个xml文档中,一些属性包含特殊字符,如“\n”、“t”等。 有没有一种简单的方法可以将所有这些字符串替换为实际的字符,或者我必须像下面的例子一样为每个字符手动替换? 手动示例: 编辑: 我正在寻找某种方法来处理字符串,就像这样的转义字符串(尽管我知道这是行不通的)

  • 问题内容: 我在相当大的Angular项目上使用angular-translate。我将项目分为多个模块以使其更易于管理,但是无法分解每个模块的翻译字符串。 例如,我有模块A和B,其中B是A的子模块。有一些与模块A覆盖的HTML有关的字符串,它们位于’/json/localization/A/en.json’中。同样,我在’/json/localization/B/en.json’中放置了与B有关

  • 因此,问题如下。我正在将一个站点从每种语言的内容数组转换为一个gettext站点,在原始语言的基础上增加两种语言。 所以我的基础语言是es_MX,我有en_US和fr_FR的翻译。 我在中使用以下参数。htaccess可传递有关区域设置的信息: 所以,当我检查$_GET参数时,一切都被正确接收。 案例1:默认es_MX 案例2:en_US 案例三:fr_FR 因此,在这之后,为了在社交网络插件或属

  • 我试图使用gettext翻译我的PHP项目,但它不起作用。PHP输出gettext字符串名称,而不是实际的翻译。. po文件在POEditor中编译。 设置区域设置: PO文件:(在locale/en/LC_MESSAGES/filename.PO中) 在PHP中回声: 是的,我尝试了从stackoverflow到Google的一切,用了3个多小时。我已经在PHP中安装了gettext,还尝试重新

  • 我的部分源代码以英文显示使用常见文本格式字符的文本(例如::)。当我调用并在Qt Linguist中打开.ts文件时,它会正确地在源文本预览空间中显示格式化文本(因此没有或其他)。 问题是,当我翻译字符串并将格式化字符放入翻译并用翻译文件运行应用程序时,我的应用程序将特殊字符读为正常字符! 我怎样才能克服这个问题呢?如何设置必要的文本格式,使翻译过程不会产生这样的错误?