Skip to content

Commit 6ebc051

Browse files
committed
black
1 parent b6ad037 commit 6ebc051

File tree

14 files changed

+267
-293
lines changed

14 files changed

+267
-293
lines changed

setup.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@
7070
"deepl": [
7171
"deepl",
7272
],
73+
"aws": [
74+
"boto3",
75+
],
76+
"deepseek": [
77+
"openai",
78+
],
7379
"libretranslate": [],
7480
},
7581
entry_points="""

src/collective/translators/amazon/utility.py

Lines changed: 0 additions & 58 deletions
This file was deleted.
File renamed without changes.

src/collective/translators/amazon/configure.zcml renamed to src/collective/translators/aws/configure.zcml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
<utility
88
provides="plone.app.multilingual.interfaces.IExternalTranslationService"
9-
name="amazon_translate"
10-
component=".utility.AmazonTranslator"
9+
name="aws_translate"
10+
component=".utility.AWSTranslator"
1111
/>
1212

13-
</configure>
13+
</configure>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from plone import api
2+
3+
import boto3
4+
5+
6+
class AWSTranslatorFactory:
7+
order = 30
8+
9+
@property
10+
def translator(self):
11+
access_key = api.portal.get_registry_record(
12+
"collective.translators.interfaces.IAWSTranslateControlPanel.access_key"
13+
)
14+
secret_key = api.portal.get_registry_record(
15+
"collective.translators.interfaces.IAWSTranslateControlPanel.secret_key"
16+
)
17+
region_name = api.portal.get_registry_record(
18+
"collective.translators.interfaces.IAWSTranslateControlPanel.region_name"
19+
)
20+
return boto3.client(
21+
"translate",
22+
region_name=region_name,
23+
aws_access_key_id=access_key,
24+
aws_secret_access_key=secret_key,
25+
)
26+
27+
def is_available(self):
28+
try:
29+
enabled = api.portal.get_registry_record(
30+
"collective.translators.interfaces.IAWSTranslateControlPanel.enabled"
31+
)
32+
return enabled
33+
except api.exc.InvalidParameterError:
34+
return False
35+
36+
def available_languages(self):
37+
try:
38+
# Check if the translator client is available
39+
if not self.translator:
40+
return ["Not set"]
41+
42+
# Get all available languages
43+
response = self.translator.list_languages(DisplayLanguageCode="en")
44+
45+
# Extract source languages
46+
source_lang_codes = [
47+
lang["LanguageCode"].lower() for lang in response["Languages"]
48+
]
49+
50+
# Create a list of tuples (source_lang, target_lang)
51+
translation_pairs = [
52+
(source_lang, target_lang)
53+
for source_lang in source_lang_codes
54+
for target_lang in source_lang_codes
55+
]
56+
57+
return translation_pairs
58+
59+
except boto3.exceptions.Boto3Error:
60+
return ["Not set"]
61+
62+
def translate_content(self, content, source_language, target_language):
63+
try:
64+
res = self.translator.translate_text(
65+
Text=content,
66+
SourceLanguageCode=source_language,
67+
TargetLanguageCode=target_language,
68+
)
69+
return res["TranslatedText"]
70+
except boto3.exceptions.Boto3Error:
71+
# Retry with autodetect
72+
try:
73+
res = self.translator.translate_text(
74+
Text=content, TargetLanguageCode=target_language
75+
)
76+
return res["TranslatedText"]
77+
except boto3.exceptions.Boto3Error:
78+
return "Language not supported"
79+
80+
81+
AWSTranslator = AWSTranslatorFactory()

src/collective/translators/configure.zcml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@
2929
zcml:condition="installed deepl"
3030
/>
3131
<include package=".libretranslate" />
32-
<include package=".amazon"/>
33-
<include package=".deepseek"/>
32+
<include
33+
package=".aws"
34+
zcml:condition="installed boto3"
35+
/>
36+
<include
37+
package=".deepseek"
38+
zcml:condition="installed openai"
39+
/>
3440

3541
</configure>

src/collective/translators/controlpanel/configure.zcml

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
permission="cmf.ManagePortal"
1313
layer="..interfaces.IBrowserLayer"
1414
/>
15-
15+
1616
<browser:page
17-
name="amazon-translator-controlpanel"
17+
name="aws-translator-controlpanel"
1818
for="plone.base.interfaces.IPloneSiteRoot"
19-
class=".controlpanel.AmazonTranslateControlPanel"
19+
class=".controlpanel.AWSTranslateControlPanel"
2020
permission="cmf.ManagePortal"
2121
layer="..interfaces.IBrowserLayer"
2222
/>
23-
23+
2424
<browser:page
2525
name="libretranslate-translator-controlpanel"
2626
for="plone.base.interfaces.IPloneSiteRoot"
@@ -29,7 +29,7 @@
2929
layer="..interfaces.IBrowserLayer"
3030
/>
3131

32-
<browser:page
32+
<browser:page
3333
name="deepseek-translator-controlpanel"
3434
for="plone.base.interfaces.IPloneSiteRoot"
3535
class=".controlpanel.DeepSeekControlPanel"
@@ -39,18 +39,22 @@
3939

4040
<adapter
4141
factory=".controlpanel.DeeplRegistryConfigletPanel"
42-
name="deepl-controlpanel" />
42+
name="deepl-controlpanel"
43+
/>
4344

4445
<adapter
45-
factory=".controlpanel.AmazonTranslateRegistryConfigletPanel"
46-
name="amazon-translate-controlpanel" />
46+
factory=".controlpanel.AWSTranslateRegistryConfigletPanel"
47+
name="aws-translate-controlpanel"
48+
/>
4749

4850
<adapter
4951
factory=".controlpanel.LibreTranslateRegistryConfigletPanel"
50-
name="libre-translate-controlpanel" />
52+
name="libre-translate-controlpanel"
53+
/>
5154

5255
<adapter
53-
factory=".controlpanel.DeepSeekRegistryConfigletPanel"
54-
name="deepseek-controlpanel" />
56+
factory=".controlpanel.DeepSeekRegistryConfigletPanel"
57+
name="deepseek-controlpanel"
58+
/>
5559

5660
</configure>

src/collective/translators/controlpanel/controlpanel.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
from collective.translators import _
2+
from collective.translators.interfaces import IAWSTranslateControlPanel
13
from collective.translators.interfaces import IDeeplControlPanel
2-
from collective.translators.interfaces import IAmazonTranslateControlPanel
3-
from collective.translators.interfaces import ILibreTranslateControlPanel
44
from collective.translators.interfaces import IDeepSeekControlPanel
5+
from collective.translators.interfaces import ILibreTranslateControlPanel
56
from plone.app.registry.browser import controlpanel
6-
from collective.translators import _
77
from plone.restapi.controlpanels import RegistryConfigletPanel
88
from zope.component import adapter
99
from zope.interface import Interface
@@ -19,21 +19,25 @@ class DeeplControlPanel(controlpanel.RegistryEditForm):
1919
label = _("Deepl Translation Service")
2020
schema = IDeeplControlPanel
2121

22-
class AmazonTranslateControlPanel(controlpanel.RegistryEditForm):
23-
id = "AmazonTranslateControlPanel"
24-
label = _("Amazon Translate Service")
25-
schema = IAmazonTranslateControlPanel
22+
23+
class AWSTranslateControlPanel(controlpanel.RegistryEditForm):
24+
id = "AWSTranslateControlPanel"
25+
label = _("AWS Translate Service")
26+
schema = IAWSTranslateControlPanel
27+
2628

2729
class LibreTranslateControlPanel(controlpanel.RegistryEditForm):
2830
id = "LibreTranslateControlPanel"
2931
label = _("Libre Translate Service")
3032
schema = ILibreTranslateControlPanel
3133

34+
3235
class DeepSeekControlPanel(controlpanel.RegistryEditForm):
3336
id = "DeepSeekControlPanel"
3437
label = _("DeepSeek Translation Service")
3538
schema = IDeepSeekControlPanel
3639

40+
3741
@adapter(Interface, Interface)
3842
class DeeplRegistryConfigletPanel(RegistryConfigletPanel):
3943
"""Deepl control panel"""
@@ -45,17 +49,19 @@ class DeeplRegistryConfigletPanel(RegistryConfigletPanel):
4549
title = _("Deepl Settings")
4650
group = "Products"
4751

52+
4853
@adapter(Interface, Interface)
49-
class AmazonTranslateRegistryConfigletPanel(RegistryConfigletPanel):
50-
"""Amazon Translate control panel"""
54+
class AWSTranslateRegistryConfigletPanel(RegistryConfigletPanel):
55+
"""AWS Translate control panel"""
5156

52-
schema = IAmazonTranslateControlPanel
53-
schema_prefix = "amazon_translate"
54-
configlet_id = "amazon-translate-controlpanel"
57+
schema = IAWSTranslateControlPanel
58+
schema_prefix = "aws_translate"
59+
configlet_id = "aws-translate-controlpanel"
5560
configlet_category_id = "Products"
56-
title = _("Amazon Translate Settings")
61+
title = _("AWS Translate Settings")
5762
group = "Products"
5863

64+
5965
@adapter(Interface, Interface)
6066
class LibreTranslateRegistryConfigletPanel(RegistryConfigletPanel):
6167
"""Libre Translate control panel"""
@@ -67,6 +73,7 @@ class LibreTranslateRegistryConfigletPanel(RegistryConfigletPanel):
6773
title = _("Libre Translate Settings")
6874
group = "Products"
6975

76+
7077
@adapter(Interface, Interface)
7178
class DeepSeekRegistryConfigletPanel(RegistryConfigletPanel):
7279
"""DeepSeek control panel"""
@@ -76,4 +83,4 @@ class DeepSeekRegistryConfigletPanel(RegistryConfigletPanel):
7683
configlet_id = "deepseek-controlpanel"
7784
configlet_category_id = "Products"
7885
title = _("DeepSeek Settings")
79-
group = "Products"
86+
group = "Products"

0 commit comments

Comments
 (0)