最後活躍 10 months ago

這段 Python 程式碼使用 工廠方法模式(Factory Method Pattern)來實現 多語言在地化(Localization)。它定義了 English(英文)、Greek(希臘文)、Chinese(中文)三種 Localizer 類別,透過 get_localizer(language) 方法 根據指定語言動態選擇適當的翻譯器。 執行時,程式會將 "dog parrot cat bear" 逐字進行翻譯,並輸出對應語言的結果。這適用於 國際化(i18n)開發、跨語系應用程式、系統訊息翻譯 等場景,讓程式能 彈性支援不同語言。

修訂 fa193c9a27ddfa4a840c3d74021865ca137f4ca7

factory_method_example.py 原始檔案
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4
5"""
6factory.py: 工廠方法模式的範例程式
7
8Author: Timmy
9Copyright: Copyright 2022, Timmy
10授權方式: MIT
11版本: 1.0
12"""
13
14
15class GreekLocalizer:
16 def __init__(self): # 建構子,在建立物件時會自動執行
17 self.translations = {"dog": "σκύλος", "cat": "γάτα"} # 定義字典 translations
18
19 def localize(self, msg): # 定義 localize 方法
20 return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg
21
22
23class GreekLocalizer:
24 def __init__(self): # 建構子,在建立物件時會自動執行
25 self.translations = {"dog": "σκύλος", "cat": "γάτα"} # 定義字典 translations
26
27 def localize(self, msg): # 定義 localize 方法
28 return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg
29
30
31class EnglishLocalizer: # 定義 EnglishLocalizer 類別
32 def localize(self, msg): # 定義 localize 方法
33 return msg # 傳回原本的 msg,即不進行轉換
34
35
36class ChineseLocalizer:
37 def __init__(self): # 建構子,在建立物件時會自動執行
38 self.translations = {"dog": "", "cat": ""} # 定義字典 translations
39
40 def localize(self, msg): # 定義 localize 方法
41 return self.translations.get(msg, msg) # 傳回 translations 字典的對應轉換,若無則傳回原本的 msg
42
43
44def get_localizer(language="English"): # 定義 get_localizer 函式
45 """Factory"""
46
47 # 定義字典 localizers
48 localizers = {
49 "English": EnglishLocalizer, # 英文的 Localizer
50 "Greek": GreekLocalizer, # 希臘文的 Localizer
51 "Chinese": ChineseLocalizer, # 中文的 Localizer
52 }
53
54 # 傳回對應語言的 Localizer 物件
55 return localizers[language]()
56
57
58def main():
59
60 e, g, ch = (
61 get_localizer(language="English"),
62 get_localizer(language="Greek"),
63 get_localizer(language="Chinese"),
64 )
65
66 # 將字串 "dog parrot cat bear" 依照空白斷開,並按順序逐一取出
67 for msg in "dog parrot cat bear".split():
68 # 印出英文、希臘文、中文的 Localizer 對於該字串
69 print(e.localize(msg), g.localize(msg), ch.localize(msg))
70
71
72if __name__ == "__main__":
73 main()
74