| # Test message extraction |
| from gettext import ( |
| gettext, |
| ngettext, |
| pgettext, |
| npgettext, |
| dgettext, |
| dngettext, |
| dpgettext, |
| dnpgettext |
| ) |
| |
| _ = gettext |
| |
| # Empty string |
| _("") |
| |
| # Extra parentheses |
| (_("parentheses")) |
| ((_("parentheses"))) |
| _(("parentheses")) |
| |
| # Multiline strings |
| _("Hello, " |
| "world!") |
| |
| _("""Hello, |
| multiline! |
| """) |
| |
| # Invalid arguments |
| _() |
| _(None) |
| _(1) |
| _(False) |
| _(["invalid"]) |
| _({"invalid"}) |
| _("string"[3]) |
| _("string"[:3]) |
| _({"string": "foo"}) |
| |
| # pygettext does not allow keyword arguments, but both xgettext and pybabel do |
| _(x="kwargs are not allowed!") |
| |
| # Unusual, but valid arguments |
| _("foo", "bar") |
| _("something", x="something else") |
| |
| # .format() |
| _("Hello, {}!").format("world") # valid |
| _("Hello, {}!".format("world")) # invalid, but xgettext extracts the first string |
| |
| # Nested structures |
| _("1"), _("2") |
| arr = [_("A"), _("B")] |
| obj = {'a': _("A"), 'b': _("B")} |
| {{{_('set')}}} |
| |
| |
| # Nested functions and classes |
| def test(): |
| _("nested string") |
| [_("nested string")] |
| |
| |
| class Foo: |
| def bar(self): |
| return _("baz") |
| |
| |
| def bar(x=_('default value')): |
| pass |
| |
| |
| def baz(x=[_('default value')]): |
| pass |
| |
| |
| # Shadowing _() |
| def _(x): |
| pass |
| |
| |
| def _(x="don't extract me"): |
| pass |
| |
| |
| # Other gettext functions |
| gettext("foo") |
| ngettext("foo", "foos", 1) |
| pgettext("context", "foo") |
| npgettext("context", "foo", "foos", 1) |
| dgettext("domain", "foo") |
| dngettext("domain", "foo", "foos", 1) |
| dpgettext("domain", "context", "foo") |
| dnpgettext("domain", "context", "foo", "foos", 1) |
| |
| # Complex arguments |
| ngettext("foo", "foos", 42 + (10 - 20)) |
| ngettext("foo", "foos", *args) |
| ngettext("foo", "foos", **kwargs) |
| dgettext(["some", {"complex"}, ("argument",)], "domain foo") |
| |
| # Invalid calls which are not extracted |
| gettext() |
| ngettext('foo') |
| pgettext('context') |
| npgettext('context', 'foo') |
| dgettext('domain') |
| dngettext('domain', 'foo') |
| dpgettext('domain', 'context') |
| dnpgettext('domain', 'context', 'foo') |
| dgettext(*args, 'foo') |
| dpgettext(*args, 'context', 'foo') |
| dnpgettext(*args, 'context', 'foo', 'foos') |
| |
| # f-strings |
| f"Hello, {_('world')}!" |
| f"Hello, {ngettext('world', 'worlds', 3)}!" |