ಅನುವಾದ ವ್ಯವಸ್ಥೆ: ಮೂರು-ತಂತ್ರಜ್ಞಾನ ಹೈಬ್ರಿಡ್ ವಿಧಾನ
ಈ ಲೇಖನವು ಮೂರು ತಂತ್ರಜ್ಞಾನಗಳನ್ನು—ಟೆಂಪ್ಲೇಟ್ಗಳಿಗೆ Flask-Babel, ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳಿಗೆ TranslationManager, ಮತ್ತು ವಿಷಯ ಅನುವಾದಕ್ಕೆ DeepSeek AI—ಸಂಯೋಜಿಸುವ ನಮ್ಮ ಅನುವಾದ ವ್ಯವಸ್ಥೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ, ಇದು ಸಮಗ್ರ ಬಹುಭಾಷಾ ಬೆಂಬಲವನ್ನು ಒದಗಿಸುತ್ತದೆ.
ಸಮಸ್ಯೆ: ಸಂಕೀರ್ಣ ವೆಬ್ಸೈಟ್ ಅನ್ನು ಅನುವಾದಿಸುವುದು
ನಮ್ಮ ವೆಬ್ಸೈಟ್ ಅನುವಾದ ಅಗತ್ಯವಿರುವ ಬಹು-ರೀತಿಯ ವಿಷಯಗಳನ್ನು ಹೊಂದಿದೆ:
-
ಸ್ಥಿರ ಟೆಂಪ್ಲೇಟ್ಗಳು: ನ್ಯಾವಿಗೇಷನ್, ಬಟನ್ಗಳು, ಲೇಬಲ್ಗಳು (500+ ಸ್ಟ್ರಿಂಗ್ಗಳು)
-
ಡೈನಾಮಿಕ್ ವಿಷಯ: ಉತ್ಪನ್ನ ಹೆಸರುಗಳು, ವಿವರಣೆಗಳು, ವೈಶಿಷ್ಟ್ಯಗಳು (10,000+ ಸ್ಟ್ರಿಂಗ್ಗಳು)
-
ಬಳಕೆದಾರ-ರಚಿತ ವಿಷಯ: ವಿಮರ್ಶೆಗಳು, ಕಾಮೆಂಟ್ಗಳು, ಬೆಂಬಲ ಟಿಕೆಟ್ಗಳು
-
ತಾಂತ್ರಿಕ ಪದಗಳು: ಬ್ರಾಂಡ್ ಹೆಸರುಗಳು, SKUಗಳು, URLಗಳು (ಅನುವಾದಿಸಬಾರದು)
ಒಂದೇ ಅನುವಾದ ವಿಧಾನವು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ:
-
ಯಂತ್ರ ಅನುವಾದ: ವೇಗವಾಗಿದೆ ಆದರೆ ತಾಂತ್ರಿಕ ಪದಗಳಿಗೆ ನಿಖರವಾಗಿಲ್ಲ
-
ಕೈಯಾರೆ ಅನುವಾದ: ನಿಖರವಾಗಿದೆ ಆದರೆ ನಿಧಾನ ಮತ್ತು ದುಬಾರಿ
-
ಟೆಂಪ್ಲೇಟ್-ಮಾತ್ರ: ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ನಿಭಾಯಿಸುವುದಿಲ್ಲ
ನಮಗೆ ಎಲ್ಲಾ ಮೂರರ ಅತ್ಯುತ್ತಮವನ್ನು ಸಂಯೋಜಿಸುವ ಹೈಬ್ರಿಡ್ ವಿಧಾನದ ಅಗತ್ಯವಿದೆ.
ಅನುವಾದ ವಿನ್ಯಾಸ
graph TD
Request[ಬಳಕೆದಾರ ವಿನಂತಿ
lang=hi]
subgraph Templates
Babel[Flask-Babel
.po ಫೈಲ್ಗಳು]
Static[ಸ್ಥಿರ ಸ್ಟ್ರಿಂಗ್ಗಳು
ಬಟನ್ಗಳು, ಲೇಬಲ್ಗಳು]
end
subgraph Dynamic
TM[TranslationManager
ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳು]
Phrases[ಉತ್ಪನ್ನ ಹೆಸರುಗಳು
ವೈಶಿಷ್ಟ್ಯಗಳು, ಪದಗಳು]
end
subgraph AI
DS[DeepSeek API
AI ಅನುವಾದ]
Content[ವಿವರಣೆಗಳು
ಲೇಖನಗಳು, ಉದ್ದ ಪಠ್ಯ]
end
Request --> Babel
Request --> TM
Request --> DS
Babel --> Static
TM --> Phrases
DS --> Content
Static --> Response[ಅನುವಾದಿತ ಪುಟ]
Phrases --> Response
Content --> Responseಮೂರು ತಂತ್ರಜ್ಞಾನಗಳು
1. Flask-Babel: ಟೆಂಪ್ಲೇಟ್ ಅನುವಾದಗಳು
Flask-Babel ಸ್ಥಿರ ಟೆಂಪ್ಲೇಟ್ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು gettext .po ಫೈಲ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನಿಭಾಯಿಸುತ್ತದೆ.
-
ಬಳಕೆಯ ಪ್ರಕರಣ: ನ್ಯಾವಿಗೇಷನ್, ಬಟನ್ಗಳು, ಲೇಬಲ್ಗಳು, ದೋಷ ಸಂದೇಶಗಳು
-
ಉದಾಹರಣೆ:
# ಟೆಂಪ್ಲೇಟ್
{{ _('Add to Cart') }}
# .po ಫೈಲ್ (ಹಿಂದಿ)
msgid "Add to Cart"
msgstr "कार्ट में जोड़ें"
ಲಾಭಗಳು:
-
✅ ಪ್ರಮಾಣಿತ i18n ವಿಧಾನ
-
✅ ಅನುವಾದ ಸಾಧನಗಳ ಬೆಂಬಲ (Poedit, Weblate)
-
✅ ಕಂಪೈಲ್-ಸಮಯದ ಮೌಲ್ಯೀಕರಣ
-
✅ ವೇಗವಾದ ಲುಕಪ್ (ಸಂಕಲಿತ .mo ಫೈಲ್ಗಳು)
ಮಿತಿಗಳು:
-
❌ ಸ್ಥಿರ ಸ್ಟ್ರಿಂಗ್ಗಳಿಗೆ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ
-
❌ ಹೊಸ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಸೇರಿಸಲು ಕೋಡ್ ಬದಲಾವಣೆಗಳು ಬೇಕಾಗುತ್ತವೆ
-
❌ ಡೈನಾಮಿಕ್ ವಿಷಯ ಬೆಂಬಲವಿಲ್ಲ
2. TranslationManager: ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳು
ನಮ್ಮ ಕಸ್ಟಮ್ TranslationManager ವರ್ಗವು JSON ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ.
-
ಬಳಕೆಯ ಪ್ರಕರಣ: ಉತ್ಪನ್ನ ಹೆಸರುಗಳು, ವೈಶಿಷ್ಟ್ಯಗಳು, ವಿವರಣೆಗಳು, ವಿಶೇಷಣಗಳು
-
ಉದಾಹರಣೆ:
{
"Mini PC": "मिनी पीसी",
"Intel N100": "Intel N100",
"8GB RAM": "8GB RAM",
"256GB SSD": "256GB SSD"
}
ಲಾಭಗಳು:
-
✅ ಡೈನಾಮಿಕ್ ವಿಷಯ ಬೆಂಬಲ
-
✅ ರನ್ಟೈಮ್ ನವೀಕರಣಗಳು (ರೀಸ್ಟಾರ್ಟ್ ಅಗತ್ಯವಿಲ್ಲ)
-
✅ ಸಂರಕ್ಷಣೆ ನಿಯಮಗಳು (ಬ್ರಾಂಡ್ ಹೆಸರುಗಳು, SKUಗಳು)
-
✅ ಪ್ರಾದೇಶಿಕ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ (ದಶಮಾಂಶ ವಿಭಾಜಕಗಳು)
-
✅ ಅನುವಾದ ಕ್ಯೂ (ಕಾಣೆಯಾದ ಸ್ಟ್ರಿಂಗ್ಗಳು)
ಮಿತಿಗಳು:
-
❌ ಕೈಯಾರೆ ಪದಗುಚ್ಛ ನಿರ್ವಹಣೆ
-
❌ ಅನುವಾದಕರಿಗೆ ಸಂದರ್ಭವಿಲ್ಲ
-
❌ ಆರಂಭಿಕ ಅನುವಾದ ಅಗತ್ಯವಿದೆ
3. DeepSeek AI: ವಿಷಯ ಅನುವಾದ
DeepSeek AI ಮಾದರಿಯು ದೀರ್ಘ-ರೂಪದ ವಿಷಯ ಅನುವಾದವನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ.
-
ಬಳಕೆಯ ಪ್ರಕರಣ: ಬ್ಲಾಗ್ ಲೇಖನಗಳು, ಉತ್ಪನ್ನ ವಿವರಣೆಗಳು, ಮಾರ್ಕೆಟಿಂಗ್ ಕಾಪಿ
-
ಉದಾಹರಣೆ:
prompt = f"Translate to {lang}: {text}"
response = deepseek.generate(prompt)
ಲಾಭಗಳು:
-
✅ ಉದ್ದನೆಯ ವಿಷಯವನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ (1000+ ಪದಗಳು)
-
✅ ಸಂದರ್ಭ-ಸಾಕ್ಷಿಯ ಅನುವಾದ
-
✅ ನೈಸರ್ಗಿಕ ಭಾಷಾ ಔಟ್ಪುಟ್
-
✅ ಬ್ಯಾಚ್ ಪ್ರಕ್ರಿಯೆ
ಮಿತಿಗಳು:
-
❌ ಅನುವಾದಕ್ಕೆ API ವೆಚ್ಚ
-
❌ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಅಗತ್ಯವಿದೆ
-
❌ ತಾಂತ್ರಿಕ ಪದಗಳನ್ನು ತಪ್ಪಾಗಿ ಅನುವಾದಿಸಬಹುದು
TranslationManager ವಿನ್ಯಾಸ
ಪದಗುಚ್ಛ ಕೋಷ್ಟಕ ರಚನೆ
ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳು ಪ್ರತಿ ಭಾಷೆಗೆ JSON ಫೈಲ್ಗಳಾಗಿ ಸಂಗ್ರಹಿಸಲ್ಪಡುತ್ತವೆ:
app/shared/translation/phrase_tables/
ಪ್ರತಿ ಫೈಲ್ ಇಂಗ್ಲಿಷ್ ಪದಗುಚ್ಛಗಳನ್ನು ಅನುವಾದಗಳಿಗೆ ಮ್ಯಾಪ್ ಮಾಡುತ್ತದೆ:
{
"Mini PC": "मिनी पीसी",
"Thin Client": "थिन क्लाइंट",
"Industrial PC": "औद्योगिक पीसी",
"All-in-One": "ऑल-इन-वन"
}
ಅನುವಾದ ಲುಕಪ್
get() ವಿಧಾನವು ಬಹು-ಹಂತದ ಲುಕಪ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ:
1. ಸಂರಕ್ಷಣೆ ಪರಿಶೀಲನೆ:
if self._should_skip_translation(text, lang):
return text # ಬ್ರಾಂಡ್ ಹೆಸರುಗಳು, SKUಗಳು, URLಗಳನ್ನು ಅನುವಾದಿಸಬೇಡಿ
2. ಅಲ್ಪವಿರಾಮ ವಿಭಜನೆ (ಉದ್ದನೆಯ ಸ್ಟ್ರಿಂಗ್ಗಳಿಗೆ):
if len(text) > 150 and "," in text:
parts = text.split(",")
return ", ".join(self.get(p, lang) for p in parts)
3. ಪದಗುಚ್ಛ ಕೋಷ್ಟಕ ಲುಕಪ್:
if text in self.phrase_tables[lang]:
return self.phrase_tables[lang][text]
4. ಲೆಗಸಿ ಕ್ಯಾಶೆ ಪ್ರಚಾರ:
if text_hash in self.legacy_caches[lang]:
translation = self.legacy_caches[lang][text_hash]
self.set(text, lang, translation) # ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಕ್ಕೆ ಪ್ರಚಾರ ಮಾಡಿ
return translation
5. ಕಾಣೆಯಾದರೆ ಕ್ಯೂ ಮಾಡಿ:
if queue_if_missing:
self.add_to_queue(text, lang)
return None # ಅನುವಾದ ಕಂಡುಬಂದಿಲ್ಲ
ಸಂರಕ್ಷಣೆ ನಿಯಮಗಳು
ನಾವು ನಿರ್ದಿಷ್ಟ ವಿಷಯ ಪ್ರಕಾರಗಳನ್ನು ಸಂರಕ್ಷಿಸುತ್ತೇವೆ:
ಬ್ರಾಂಡ್ ಹೆಸರುಗಳು:
BRAND_NAMES_PRESERVE = [
"Thinvent", "Intel", "AMD", "Microsoft", "Ubuntu",
"Windows", "Linux", "WiFi", "Bluetooth"
]
ತಾಂತ್ರಿಕ ಪದಗಳು:
TECHNICAL_TERMS_PRESERVE = [
"HDMI", "DisplayPort", "VGA", "USB", "Ethernet",
"DDR4", "SSD", "NVMe", "PCIe", "SATA"
]
SKUಗಳು (ಮಾದರಿ-ಆಧಾರಿತ):
if not " " in text and text.count("-") >= 2:
return True # "Treo-N100-8-256-2H-W6-11P" ಅನ್ನು ಸಂರಕ್ಷಿಸಿ
URLಗಳು:
if text.startswith(("/", "http://", "https://")):
return True
ಪ್ರಾದೇಶಿಕ ಫಾರ್ಮ್ಯಾಟಿಂಗ್
ಯುರೋಪಿಯನ್ ಸ್ಥಳೀಯತೆಗಳಿಗೆ (ಜರ್ಮನ್, ಫ್ರೆಂಚ್, ಸ್ಪ್ಯಾನಿಷ್), ನಾವು ಪ್ರಾದೇಶಿಕ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಅನ್ನು ಅನ್ವಯಿಸುತ್ತೇವೆ:
ದಶಮಾಂಶ ವಿಭಾಜಕ:
# ಇಂಗ್ಲಿಷ್: 34.00
# ಜರ್ಮನ್: 34,00
text = text.replace(".", ",")
ವೋಲ್ಟೇಜ್/ಆಂಪಿಯರೇಜ್:
# ಇಂಗ್ಲಿಷ್: 12.5V
# ಜರ್ಮನ್: 12,5V
text = re.sub(r"(\d+)\.(\d+)V", r"\1,\2V", text)
ಇದು ಪ್ರತಿ ಸ್ಥಳೀಯತೆಗೆ ಸಂಖ್ಯೆಗಳು ಸರಿಯಾಗಿ ಪ್ರದರ್ಶಿತವಾಗುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಅನುವಾದ ಕ್ಯೂ
ಕಾಣೆಯಾದ ಅನುವಾದಗಳನ್ನು ಬ್ಯಾಚ್ ಪ್ರಕ್ರಿಯೆಗಾಗಿ ಕ್ಯೂ ಮಾಡಲಾಗುತ್ತದೆ:
[
{
"text": "Compact Desktop",
"lang": "hi",
"hash": "a1b2c3d4e5f6"
},
{
"text": "Fanless Design",
"lang": "hi",
"hash": "f6e5d4c3b2a1"
}
]
ಹಿನ್ನೆಲೆ ಸ್ಕ್ರಿಪ್ಟ್ DeepSeek AI ಬಳಸಿ ಕ್ಯೂವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ:
for item in queue:
translation = deepseek.translate(item["text"], item["lang"])
translation_manager.set(item["text"], item["lang"], translation)
ಫೈಲ್ ಲಾಕಿಂಗ್
ಸಮಕಾಲೀನ ಬರಹಗಳನ್ನು ತಡೆಯಲು ನಾವು fcntl ಫೈಲ್ ಲಾಕಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ:
with open(lock_path, "w") as lock_file:
fcntl.flock(lock_file, fcntl.LOCK_EX)
try:
# ಪದಗುಚ್ಛ ಕೋಷ್ಟಕವನ್ನು ಓದಿ, ಮಾರ್ಪಡಿಸಿ, ಬರೆಯಿರಿ
with open(table_path, "r+") as f:
data = json.load(f)
data.update(new_translations)
f.seek(0)
json.dump(data, f)
f.truncate()
finally:
fcntl.flock(lock_file, fcntl.LOCK_UN)
ಇದು ಬಹು ಪ್ರಕ್ರಿಯೆಗಳು ಪದಗುಚ್ಛ ಕೋಷ್ಟಕಗಳನ್ನು ಹಾಳುಮಾಡದಂತೆ ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಭಾಷಾ ಪತ್ತೆ
ನಾವು ಯೂನಿಕೋಡ್ ಶ್ರೇಣಿಗಳು ಮತ್ತು ಸ್ಟಾಪ್ವರ್ಡ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರಶ್ನೆಯ ಭಾಷೆಯನ್ನು ಪತ್ತೆ ಮಾಡುತ್ತೇವೆ:
ಯೂನಿಕೋಡ್ ಶ್ರೇಣಿ ಪತ್ತೆ
ದೇವನಾಗರಿ (ಹಿಂದಿ, ಮರಾಠಿ):
if 0x0900 <= ord(char) <= 0x097F:
return "hi"
ಬಂಗಾಳಿ: ```python if 0x0980 <= ord(char) <= 0x09FF: