-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Arabic ui texts for testing rtl languages (#1315)
Add arabic ui texts
- Loading branch information
Showing
9 changed files
with
1,461 additions
and
0 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 |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import os | ||
import json | ||
import http.client | ||
from typing import Dict, Any | ||
import json5 | ||
import pdb | ||
|
||
|
||
current_file_path = os.path.abspath(__file__) | ||
LOCALES_DIR = os.path.abspath(os.path.join(__file__, '..', '..', 'shared-module', 'packages', 'common', 'src', 'locales')) | ||
|
||
def create_payload(prompt: str, user_message: str) -> Dict[str, Any]: | ||
"""Create the payload for the API request.""" | ||
return { | ||
"messages": [{"role": "system", "content": prompt}, {"role": "user", "content": user_message}], | ||
"temperature": 0.4, | ||
"top_p": 1.0, | ||
"frequency_penalty": 0.0, | ||
"presence_penalty": 0.0, | ||
"stop": None, | ||
"stream": False | ||
} | ||
|
||
def get_api_key() -> str: | ||
"""Retrieve the API key from environment variables.""" | ||
api_key = os.getenv('AZURE_API_KEY') | ||
|
||
if not api_key: | ||
raise ValueError("AZURE_API_KEY environment variable not set") | ||
return api_key | ||
|
||
def make_api_request(payload: Dict[str, Any], api_key: str) -> str: | ||
api_host = os.getenv('AZURE_API_HOST') | ||
api_model = os.getenv('AZURE_API_MODEL') | ||
conn = http.client.HTTPSConnection(api_host) | ||
headers = { | ||
'api-key': api_key, | ||
'Content-Type': "application/json" | ||
} | ||
conn.request( | ||
"POST", | ||
f"/openai/deployments/{api_model}/chat/completions?api-version=2024-06-01", | ||
json.dumps(payload, ensure_ascii=False), | ||
headers | ||
) | ||
res = conn.getresponse() | ||
return res.read().decode("utf-8") | ||
|
||
def main(): | ||
desired_language = input("What language would you like to translate to? ").strip() | ||
new_language_slug = input("What is the slug for the language? ").strip() | ||
result_folder = os.path.join(LOCALES_DIR, new_language_slug) | ||
if not os.path.exists(result_folder): | ||
os.makedirs(result_folder) | ||
for filename in os.listdir(os.path.join(LOCALES_DIR, "en")): | ||
result_dict = {} | ||
path_to_file = os.path.join(LOCALES_DIR, "en", filename) | ||
if not path_to_file.endswith(".json"): | ||
continue | ||
with open(path_to_file, "r") as file: | ||
input_file = file.read() | ||
input_file: Dict[str, str] = json.loads(input_file) | ||
# Do the operation in batches of 100 messages | ||
batches = [dict(list(input_file.items())[i:i + 100]) for i in range(0, len(input_file), 100)] | ||
|
||
for batch in batches: | ||
prompt = f"Translate the given i18next translation file from english to #{desired_language}. Answer only with the contents of the translated file. Don't include markdown markup around the result. The result should be valid JSON, it should start with the '{{'-character and it should end with the '}}' character. The input is in the next message." | ||
user_message = json.dumps(batch, indent=2, ensure_ascii=False) | ||
payload = create_payload(prompt, user_message) | ||
api_key = get_api_key() | ||
response = make_api_request(payload, api_key) | ||
parsed = json.loads(response) | ||
res = parsed['choices'][0]['message']['content'] | ||
# Using json5 because it tolerates slightly wrong commas | ||
res_parsed = json5.loads(res) | ||
result_dict.update(res_parsed) | ||
print("Completed a batch") | ||
result_file_path = os.path.join(result_folder, filename) | ||
|
||
res = json.dumps(result_dict, indent=2, ensure_ascii=False) | ||
with open(result_file_path, "w") as file: | ||
file.write(res) | ||
print(f"Translation saved to {result_file_path}") | ||
|
||
|
||
|
||
print("Starting") | ||
main() |
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
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 |
---|---|---|
@@ -0,0 +1,137 @@ | ||
{ | ||
"add-peer-review": "إضافة مراجعة الأقران", | ||
"add-peer-review-question": "إضافة سؤال مراجعة الأقران", | ||
"add-self-review": "إضافة مراجعة ذاتية", | ||
"add-slide": "إضافة شريحة", | ||
"add-task": "إضافة مهمة", | ||
"answer-required": "الإجابة مطلوبة", | ||
"are-you-sure-you-want-to-discard-changes": "هل أنت متأكد أنك تريد تجاهل التغييرات غير المحفوظة؟", | ||
"authors-block": "كتلة المؤلفين", | ||
"authors-block-description": "تُستخدم كتلة المؤلفين لعرض نبذة مختصرة وصورة للمؤلف(ين) لصفحة معينة", | ||
"available-repository-exercises": "تمارين المستودع المتاحة", | ||
"background": "الخلفية", | ||
"background-color": "لون الخلفية", | ||
"background-image": "صورة الخلفية", | ||
"block-list": "الكتل الحالية", | ||
"block-menu": "إضافة كتلة / جميع الكتل المتاحة", | ||
"block-props": "خصائص الكتلة", | ||
"button-text-create": "إنشاء", | ||
"button-text-export-all-pages": "تصدير جميع الصفحات", | ||
"button-text-select-media": "اختيار الوسائط (غير مُنفّذ)", | ||
"chapter-progress-placeholder": "عنصر نائب لتقدم الفصل", | ||
"chapter-progress-placeholder-explanation": "تُستخدم هذه الكتلة لعرض تقدم الفصل. لعرض تقدم الدورة بالكامل، يجب عليك استخدام كتلة تقدم الدورة.", | ||
"chapters-grid-placeholder": "عنصر نائب لشبكة الفصول", | ||
"chapters-grid-placeholder-explanation": "تُوضع هذه الكتلة في الصفحة الأمامية لمواد الدورة للتنقل بسهولة بين الفصول المختلفة.", | ||
"close": "إغلاق", | ||
"code-giveaway": "توزيع الأكواد", | ||
"code-giveaway-explanation": "تشير هذه الكتلة إلى مكان توزيع الأكواد في مواد الدورة.", | ||
"conditional-block": "كتلة تُعرض بشرط", | ||
"conditional-block-explanation": "ستُعرض هذه الكتلة للطالب إذا استوفى جميع الشروط المحددة.", | ||
"conditionally-shown-content": "المحتوى المعروض بشرط", | ||
"configure-review-answers-option": "تكوين خيار إجابات المراجعة", | ||
"congratulations-explanation": "تُوضع هذه الكتلة في مواد الدورة حيث ترغب في تهنئة الطالب عند إكمال الدورة. بالنسبة للدورات التي تم تكوينها للحصول على ECTS، ستوفر أيضًا رابطًا لصفحة حيث يمكنهم تسجيل إكمالهم في الجامعة المفتوحة.", | ||
"congratulations-placeholder": "عنصر نائب للتهنئة", | ||
"course-instance-enrollment-condition": "الطالب مسجل في أي من دورات الدورة التالية:", | ||
"course-progress-placeholder": "عنصر نائب لتقدم الدورة", | ||
"course-progress-placeholder-explanation": "تُوضع هذه الكتلة في مواد الدورة حيث ترغب في عرض تقدم المستخدم الحالي وعدد النقاط التي حصل عليها من الدورة بالكامل.", | ||
"default": "افتراضي", | ||
"default-question": "أدخل السؤال هنا", | ||
"delete": "حذف", | ||
"edit": "تحرير", | ||
"editor-select-sidebar-view": "تبديل العرض", | ||
"error": "خطأ", | ||
"error-cannot-render-editor-for-exercise-service-x": "لا يمكن عرض المحرر لخدمة التمرين {{slug}}.", | ||
"error-cannot-render-exercise-task-missing-url": "لا يمكن عرض مهمة التمرين، عنوان URL مفقود.", | ||
"error-question-too-short": "السؤال قصير جدًا.", | ||
"error-spec-not-parseable": "المواصفات غير قابلة للتحليل.", | ||
"exercise-custom-view-block": "كتلة عرض مخصصة للتمرين", | ||
"exercise-custom-view-block-explanation": "عرض لخدمة التمرين غير متعلق بتمرين.", | ||
"exercise-max-points": "الحد الأقصى للنقاط", | ||
"exercise-name": "اسم التمرين", | ||
"exercise-title": "التمرين", | ||
"exercises-in-chapter-placeholder": "عنصر نائب للتمارين في الفصل", | ||
"exercises-in-chapter-placeholder-explanation": "تُوضع هذه الكتلة في الصفحة الأمامية لكل فصل، مثل /chapter-1/ لعرض والتنقل بين التمارين المختلفة داخل الفصل.", | ||
"failed-loading-repository-exercises": "فشل تحميل تمارين المستودع", | ||
"font-color": "لون الخط", | ||
"glossary-placeholder": "عنصر نائب للقاموس", | ||
"glossary-placeholder-explanation": "ستحتوي هذه الكتلة على قاموس الدورة.", | ||
"header-export": "تصدير", | ||
"instructions": "التعليمات", | ||
"label-align-bottom": "محاذاة للأسفل", | ||
"label-align-center": "محاذاة للوسط", | ||
"label-default": "افتراضي", | ||
"label-email-subject": "موضوع البريد الإلكتروني", | ||
"label-no-padding": "بدون حشو", | ||
"label-points-are-all-or-nothing": "النقاط كلها أو لا شيء", | ||
"label-question": "السؤال", | ||
"label-repeat-background-x": "تكرار الخلفية أفقيًا", | ||
"label-template-name": "اسم القالب", | ||
"label-title": "العنوان", | ||
"label-weight": "الوزن", | ||
"landing-page-copy-text": "نص نسخة الصفحة الرئيسية", | ||
"learning-objectives": "أهداف التعلم", | ||
"limit-number-of-tries": "تحديد عدد المحاولات", | ||
"link-course-default-peer-review-config": "تكوين مراجعة الأقران الافتراضية للدورة", | ||
"loading": "جارٍ التحميل...", | ||
"loading-repository-exercises": "جارٍ تحميل تمارين المستودع", | ||
"map-block-placeholder": "عنصر نائب لخريطة الكتلة", | ||
"map-block-placeholder-explanation": "هذا عنصر نائب لخريطة تُظهر البلدان التي سجل فيها الطلاب في الدورة.", | ||
"menti-height-help-text": "الارتفاع بالبكسل. قم بضبط ارتفاع النافذة المدمجة بحيث يختفي شريط التمرير. تأكد أيضًا من أن شريط التمرير غير مرئي في مواد الدورة.", | ||
"menti-height-label": "الارتفاع", | ||
"menti-panel-instructions": "يرجى لصق عنوان URL للتضمين والإرسال. بعد ذلك يمكنك تحديد العنوان والارتفاع.", | ||
"menti-panel-title": "سمات Mentimeter", | ||
"menti-title-help-text": "تعيين عنوان. يُستخدم هذا بواسطة قارئات الشاشة.", | ||
"menti-title-label": "العنوان", | ||
"module-completion-condition": "أكمل الطالب أيًا من الوحدات التالية:", | ||
"needs-peer-review": "يحتاج إلى مراجعة الأقران", | ||
"no-repository-exercises-found-for-course": "لم يتم العثور على تمارين مستودع للدورة", | ||
"open-saved-page-in-new-tab": "فتح الصفحة المحفوظة في علامة تبويب جديدة", | ||
"outdated-blocks-migrated-explanation": "تم إنشاء {{num}} كتل بإصدار أقدم من المحرر وكان يجب ترحيلها إلى تنسيق جديد. احفظ الصفحة لتثبيت التغييرات.", | ||
"pages-in-chapter-placeholder": "عنصر نائب للصفحات في الفصل", | ||
"pages-in-chapter-placeholder-explanation": "تُوضع هذه الكتلة في الصفحة الأمامية لكل فصل، مثل /chapter-1/ للتنقل بسهولة بين الأقسام الفرعية المختلفة.", | ||
"partially-transparent-background": "جعل صورة الخلفية شبه شفافة", | ||
"partners-block": "كتلة الشركاء", | ||
"partners-block-description": "تُستخدم كتلة الشركاء لعرض شعارات جميع الشركاء في الصفحة الرئيسية", | ||
"peer-and-self-review-configuration": "تكوين مراجعة الأقران والمراجعة الذاتية", | ||
"peer-review-accepting-threshold": "عتبة قبول مراجعة الأقران", | ||
"peer-review-processing-strategy": "استراتيجية معالجة مراجعة الأقران", | ||
"peer-review-question": "سؤال مراجعة الأقران", | ||
"peer-review-question-type": "نوع سؤال مراجعة الأقران", | ||
"peer-reviews-to-give": "مراجعات الأقران لتقديمها", | ||
"peer-reviews-to-receive": "مراجعات الأقران لتلقيها", | ||
"peer-reviews-to-receive-and-give-error-message": "يجب أن تكون المراجعات الزملاء المقدمة أكبر من المراجعات الزملاء المستلمة", | ||
"please-select-exercise-type": "يرجى اختيار نوع التمرين:", | ||
"remove": "إزالة", | ||
"research-form-checkbox-description": "يستخدم هذا المربع لإضافة سؤال إلى نموذج البحث.", | ||
"reset": "إعادة تعيين", | ||
"save": "حفظ", | ||
"saved": "تم الحفظ", | ||
"saving": "جارٍ الحفظ...", | ||
"select": "اختر", | ||
"select-an-option": "اختر خيارًا", | ||
"select-repository-exercise": "اختر تمرين المستودع", | ||
"selected-exercise-type": "نوع التمرين المختار: {{exerciseType}}", | ||
"separator-color": "لون الفاصل", | ||
"serialize-to-html": "تحويل إلى HTML", | ||
"slide-title": "شريحة {{ number }}", | ||
"start": "ابدأ", | ||
"table-box": "صندوق الجدول", | ||
"table-box-description": "هذا هو كتلة جدول مخصصة بخلفية ملونة", | ||
"table-width-customizer": "مخصص عرض الجدول", | ||
"task": "مهمة", | ||
"title-additional-review-instructions": "تعليمات مراجعة إضافية", | ||
"title-assignment": "مهمة", | ||
"title-outdated-blocks-migrated": "تم ترحيل الكتل القديمة", | ||
"title-research-form-question": "سؤال نموذج البحث", | ||
"top-level-block-placeholder": "عنصر نائب لصفحات المستوى الأعلى", | ||
"top-level-block-placeholder-explanation": "تسرد هذه الكتلة جميع الصفحات العليا في الدورة وتوضع في الصفحة الأمامية لمواد الدورة.", | ||
"tries-per-slide": "أقصى عدد من المحاولات لكل شريحة", | ||
"unsupported-block-placeholder": "عنصر نائب للكتل غير المدعومة", | ||
"unsupported-block-placeholder-explanation": "تستخدم هذه الكتلة كعنصر نائب للكتل غير المدعومة.", | ||
"upload-or-drag-and-drop-onto-this-block": "قم بالتحميل أو السحب والإفلات على هذه الكتلة", | ||
"use-course-default-peer-review-config": "استخدم إعدادات مراجعة الزملاء الافتراضية للدورة", | ||
"use-default-text-for-label": "استخدم النص الافتراضي للتسمية", | ||
"warning-points-are-all-or-nothing-disabled": "تحذير: يُوصى بتمكين “النقاط كلها أو لا شيء”. تختلف المراجعات الزملاء التي يقدمها الطلاب بشكل كبير في الجودة، مما قد يؤدي إلى حصول بعض الطلاب على نقاط غير عادلة من التمرين. تمكين هذا الخيار يقلل من العشوائية في النقاط المستلمة، مما يجعل عملية مراجعة الزملاء أكثر عدلاً للطلاب.", | ||
"welcome-message-for-course": "رسالة ترحيب للدورة...", | ||
"width-of-table": "عرض الجدول" | ||
} |
Oops, something went wrong.