בינאום ותמיכה בשפות
מודול i18n/ מספק שכבת תרגום פשוטה לבוט הטלגרם וה-WebApp. נכון לעכשיו קיימת חבילת מחרוזות בעברית (strings_he.py), אך המבנה מאפשר הוספת שפות חדשות ללא שינוי בלוגיקה העסקית.
מבנה הקבצים
i18n/strings_<lang>.py– מגדיר שני משתנים גלובליים:MAIN_MENU– מערך דו-ממדי של טקסטים עבורReplyKeyboardMarkup.MESSAGES– מילון מחרוזות לפי מזהה לוגי (למשלwelcome).
i18n/__init__.py– נשמר ריק כדי לאפשרfrom i18n.strings_he import ...בצורה ישירה. ניתן להוסיף בו בעתיד פונקציות עזר לבחירת שפה.
דוגמה מקובץ קיים:
MAIN_MENU = [
["🗜️ יצירת ZIP", "➕ הוסף קוד חדש"],
["📚 הצג את כל הקבצים שלי", "🔧 GitHub"],
["⚡ עיבוד Batch", "📥 ייבוא ZIP מריפו"],
]
MESSAGES = {
"welcome": (
"🤖 שלום וברוך הבא לבוט שומר הקוד המתקדם!\n\n"
"🔹 שמור ונהל קטעי קוד בחכמה\n"
"🔹 העלאת קבצים ל-GitHub\n"
"🔧 תקלה בבוט? כתבו ל-@moominAmir\n"
),
"choose_view": "בחר/י דרך להצגת הקבצים:",
}
בחירת שפה בזמן ריצה
הבוט משתמש בברירת המחדל העברית דרך יבוא ישיר בקובץ conversation_handlers.py:
from i18n.strings_he import MAIN_MENU as MAIN_KEYBOARD
from i18n.strings_he import MESSAGES
כדי להחליף שפה או להפעיל i18n דינמי:
שמרו את העדפת המשתמש ב-DB (לדוגמה
user_settings.language).צרו פונקציה עוטפת (למשל
load_strings(lang_code: str)) שמחזירה מודול השפה הרלוונטי ע“יimportlib.החליפו את היבוא הישיר בהפניה דינמית:
from importlib import import_module def get_strings(lang: str): module_name = f"i18n.strings_{lang}" return import_module(module_name) strings = get_strings(preferred_lang) keyboard = ReplyKeyboardMarkup(strings.MAIN_MENU, resize_keyboard=True) welcome_text = strings.MESSAGES["welcome"].format(name=user_name)
הגדירו ערך ברירת מחדל (למשל
lang="he") למקרה שהמשתמש לא הזין העדפה או שהמודול לא קיים.
הוספת שפה חדשה
העתיקו את
i18n/strings_he.pyלקובץ חדשi18n/strings_<iso>.py(למשלstrings_en.py).הקפידו להשאיר את אותם keys ב-
MESSAGESכדי למנועKeyErrorבקוד שקורא להם.שימרו על placeholders קיימים (למשל
{name}או{count}) – אחרתstr.formatייכשל.הוסיפו את המודול החדש לטבלת המרה כלשהי (dictionary או Enum) כך שה-UI יוכל להציג בחירה למשתמש.
בדקו ב-/start ובזרימות Telegram נוספות כדי לוודא שאין מחרוזות משולבות באנגלית שנותרו ללא תרגום.
עקרונות כתיבה
RTL מול LTR – השתמשו באותיות המכילות כיוון מובנה (בוט Telegram מסתדר עם שניהם, אבל WebApp עלול לדרוש מחלקות CSS).
אמוג’ים וסמלים – שמרו על אמוג׳ים קיימים כדי לשמור עקביות בין השפות; הם ממלאים תפקיד של אייקונים בתפריטים.
יישור – העדיפו משפטים קצרים, ללא שורות ארוכות מדי (Telegram עוטף טקסט אוטומטית אך עדיף להכניס שורות חדשות במקומות הגיוניים).
בדיקות מהירות
הפעלת
pytest tests/test_bookmarks.pyאינה נדרשת ל-i18n, אך מומלץ להריץ לפחות/startבסביבת sandbox כדי לראות שה-Keyboard והמחרוזות מוצגים כראוי.כאשר מוסיפים שפה עם תווי Latin, ודאו שהפונטים ב-WebApp ואתרי ה-Markdown תומכים בה (למשל DejaVu Sans בגזירת התמונות).