-
-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Branch: refs/heads/master Date: 2023-12-05T11:51:36-03:00 Author: Érico Andrei (ericof) <ericof@gmail.com> Commit: plone/plone.api@ba7327f Fix 'api.portal.translate' usage with country-specific language codes (Fixes #524) Files changed: A news/524.bugfix M src/plone/api/portal.py M src/plone/api/tests/test_portal.py Repository: plone.api Branch: refs/heads/master Date: 2023-12-05T12:41:43-03:00 Author: Érico Andrei (ericof) <ericof@gmail.com> Commit: plone/plone.api@3feed99 Fix isort Files changed: M src/plone/api/portal.py Repository: plone.api Branch: refs/heads/master Date: 2023-12-05T18:55:07+01:00 Author: Maurits van Rees (mauritsvanrees) <maurits@vanrees.org> Commit: plone/plone.api@91825e3 Merge pull request #525 from plone/issue-524-translate Fix 'api.portal.translate' usage with country-specific language codes Files changed: A news/524.bugfix M src/plone/api/portal.py M src/plone/api/tests/test_portal.py
- Loading branch information
1 parent
5699296
commit fe454a4
Showing
1 changed file
with
41 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,51 @@ | ||
Repository: plone.app.layout | ||
Repository: plone.api | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2023-12-05T10:07:00+01:00 | ||
Date: 2023-12-05T11:51:36-03:00 | ||
Author: Érico Andrei (ericof) <ericof@gmail.com> | ||
Commit: https://github.com/plone/plone.api/commit/ba7327f412440c23bcbe5c6dc56eea4e581ad225 | ||
|
||
Fix 'api.portal.translate' usage with country-specific language codes (Fixes #524) | ||
|
||
Files changed: | ||
A news/524.bugfix | ||
M src/plone/api/portal.py | ||
M src/plone/api/tests/test_portal.py | ||
|
||
b'diff --git a/news/524.bugfix b/news/524.bugfix\nnew file mode 100644\nindex 00000000..4e116b33\n--- /dev/null\n+++ b/news/524.bugfix\n@@ -0,0 +1 @@\n+Fix `api.portal.translate` usage with country-specific language codes [@ericof]\ndiff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex adef18d9..31c32632 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -19,7 +19,7 @@\n from zope.interface.interfaces import IInterface\n \n import datetime as dtime\n-\n+import re\n \n logger = getLogger("plone.api.portal")\n \n@@ -419,6 +419,8 @@ def translate(msgid, domain="plone", lang=None):\n :Example: :ref:`portal-translate-example`\n """\n translation_service = get_tool("translation_service")\n+ if lang and re.match(r"\\D{2}-\\D{2}", lang):\n+ lang = f"{lang[:2]}_{lang[-2:].upper()}"\n query = {\n "msgid": msgid,\n "domain": domain,\ndiff --git a/src/plone/api/tests/test_portal.py b/src/plone/api/tests/test_portal.py\nindex 83f19886..a467ba1a 100644\n--- a/src/plone/api/tests/test_portal.py\n+++ b/src/plone/api/tests/test_portal.py\n@@ -886,3 +886,20 @@ def test_translate(self):\n ),\n "Avril",\n )\n+\n+ def test_translate_with_country_codes(self):\n+ """Test translation."""\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt-br",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt_BR",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n' | ||
|
||
Repository: plone.api | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2023-12-05T12:41:43-03:00 | ||
Author: Érico Andrei (ericof) <ericof@gmail.com> | ||
Commit: https://github.com/plone/plone.api/commit/3feed99ed1599ac64d3bf1212de2a6befe21af5b | ||
|
||
Fix isort | ||
|
||
Files changed: | ||
M src/plone/api/portal.py | ||
|
||
b'diff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex 31c32632..1aec4997 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -21,6 +21,7 @@\n import datetime as dtime\n import re\n \n+\n logger = getLogger("plone.api.portal")\n \n try:\n' | ||
|
||
Repository: plone.api | ||
|
||
|
||
Branch: refs/heads/master | ||
Date: 2023-12-05T18:55:07+01:00 | ||
Author: Maurits van Rees (mauritsvanrees) <maurits@vanrees.org> | ||
Commit: https://github.com/plone/plone.app.layout/commit/ebbf718c2852e7eb479ba5879ee44fe6c4714146 | ||
Commit: https://github.com/plone/plone.api/commit/91825e34bd2703256a397efa6dc07ddd7d93d910 | ||
|
||
Fix KeyError `time` when missing workflow variables are added later. | ||
Merge pull request #525 from plone/issue-524-translate | ||
|
||
Fixes https://github.com/plone/plone.app.layout/issues/357. | ||
Fix 'api.portal.translate' usage with country-specific language codes | ||
|
||
Files changed: | ||
A news/357.bugfix | ||
M plone/app/layout/viewlets/content.py | ||
M plone/app/layout/viewlets/content_history.pt | ||
A news/524.bugfix | ||
M src/plone/api/portal.py | ||
M src/plone/api/tests/test_portal.py | ||
|
||
b'diff --git a/news/357.bugfix b/news/357.bugfix\nnew file mode 100644\nindex 00000000..47e82fd2\n--- /dev/null\n+++ b/news/357.bugfix\n@@ -0,0 +1,3 @@\n+Fix KeyError `time` when missing workflow variables are added later.\n+Fixes `issue 357 <https://github.com/plone/plone.app.layout/issues/357>`_.\n+[maurits]\ndiff --git a/plone/app/layout/viewlets/content.py b/plone/app/layout/viewlets/content.py\nindex 28633600..efc8d4e4 100644\n--- a/plone/app/layout/viewlets/content.py\n+++ b/plone/app/layout/viewlets/content.py\n@@ -383,30 +383,43 @@ def workflowHistory(self, complete=True):\n review_history = []\n \n try:\n- # get total history\n+ # Get total history.\n+ # Note: expected variables like \'action\' may not exist:\n+ # the workflow may have started out without variables.\n review_history = workflow.getInfoFor(context, "review_history")\n \n if not complete:\n # filter out automatic transitions.\n- review_history = [r for r in review_history if r["action"]]\n+ review_history = [r for r in review_history if r.get("action")]\n else:\n review_history = list(review_history)\n \n portal_type = context.portal_type\n anon = _("label_anonymous_user", default="Anonymous User")\n-\n for r in review_history:\n r["type"] = "workflow"\n- r["transition_title"] = workflow.getTitleForTransitionOnType(\n- r["action"], portal_type\n- ) or _("Create")\n+\n+ # Get transition title.\n+ transition_title = ""\n+ action = r.get("action")\n+ if action:\n+ transition_title = workflow.getTitleForTransitionOnType(\n+ action, portal_type\n+ )\n+ if not transition_title:\n+ transition_title = _("Create")\n+ r["transition_title"] = transition_title\n+\n+ # Get state title.\n r["state_title"] = workflow.getTitleForStateOnType(\n- r["review_state"], portal_type\n+ r.get("review_state", ""), portal_type\n )\n- actorid = r["actor"]\n+\n+ # Get actor.\n+ actorid = r.get("actor")\n r["actorid"] = actorid\n if actorid is None:\n- # action performed by an anonymous user\n+ # action performed by an anonymous user, or unknown\n r["actor"] = {"username": anon, "fullname": anon}\n r["actor_home"] = ""\n else:\n@@ -509,7 +522,7 @@ def fullHistory(self):\n history = self.workflowHistory() + self.revisionHistory()\n if len(history) == 0:\n return None\n- history.sort(key=lambda x: x["time"], reverse=True)\n+ history.sort(key=lambda x: x.get("time", 0.0), reverse=True)\n return history\n \n def toLocalizedTime(self, time, long_format=None, time_only=None):\ndiff --git a/plone/app/layout/viewlets/content_history.pt b/plone/app/layout/viewlets/content_history.pt\nindex 831a9a90..71b4b735 100644\n--- a/plone/app/layout/viewlets/content_history.pt\n+++ b/plone/app/layout/viewlets/content_history.pt\n@@ -25,13 +25,13 @@\n <tal:historyitem define="\n rhComments item/comments|nothing;\n actor item/actor;\n- actor_name python:actor and actor.get(\'fullname\',\'username\') or item[\'actorid\'];\n+ actor_name python:actor and actor.get(\'fullname\',\'username\') or item.get(\'actorid\', \'\');\n actor_home item/actor_home;\n action item/transition_title;\n- action_id python:item[\'action\'] or item[\'review_state\'];\n+ action_id python:item.get(\'action\') or item.get(\'review_state\', \'\');\n effective item/effective_date|nothing;\n effectiveDate python:effective and view.toLocalizedTime(item[\'effective_date\'],long_format=True);\n- isVersion python:item[\'type\']==\'versioning\';\n+ isVersion python:item.get(\'type\', \'\')==\'versioning\';\n icons python:context.restrictedTraverse(\'@@iconresolver\');\n ">\n <tr class="historyRecord ${python:\'table-secondary\' if not isVersion else \'\'}">\n@@ -62,7 +62,7 @@\n ></span>\n </tal:actor>\n on\n- <span tal:content="python:view.toLocalizedTime(item[\'time\'],long_format=True)"\n+ <span tal:content="python:view.toLocalizedTime(item.get(\'time\', 0.0),long_format=True)"\n i18n:name="time"\n i18n:translate=""\n ></span>\n' | ||
b'diff --git a/news/524.bugfix b/news/524.bugfix\nnew file mode 100644\nindex 00000000..4e116b33\n--- /dev/null\n+++ b/news/524.bugfix\n@@ -0,0 +1 @@\n+Fix `api.portal.translate` usage with country-specific language codes [@ericof]\ndiff --git a/src/plone/api/portal.py b/src/plone/api/portal.py\nindex adef18d9..1aec4997 100644\n--- a/src/plone/api/portal.py\n+++ b/src/plone/api/portal.py\n@@ -19,6 +19,7 @@\n from zope.interface.interfaces import IInterface\n \n import datetime as dtime\n+import re\n \n \n logger = getLogger("plone.api.portal")\n@@ -419,6 +420,8 @@ def translate(msgid, domain="plone", lang=None):\n :Example: :ref:`portal-translate-example`\n """\n translation_service = get_tool("translation_service")\n+ if lang and re.match(r"\\D{2}-\\D{2}", lang):\n+ lang = f"{lang[:2]}_{lang[-2:].upper()}"\n query = {\n "msgid": msgid,\n "domain": domain,\ndiff --git a/src/plone/api/tests/test_portal.py b/src/plone/api/tests/test_portal.py\nindex 83f19886..a467ba1a 100644\n--- a/src/plone/api/tests/test_portal.py\n+++ b/src/plone/api/tests/test_portal.py\n@@ -886,3 +886,20 @@ def test_translate(self):\n ),\n "Avril",\n )\n+\n+ def test_translate_with_country_codes(self):\n+ """Test translation."""\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt-br",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n+ self.assertEqual(\n+ portal.translate(\n+ "Page",\n+ lang="pt_BR",\n+ ),\n+ "P\xc3\xa1gina",\n+ )\n' | ||
|