Last active 10 months ago

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

timmy revised this gist 10 months ago. Go to revision

No changes

timmy revised this gist 10 months ago. Go to revision

No changes

timmy revised this gist 1 year ago. Go to revision

1 file changed, 73 insertions

factory_method_example.py(file created)

@@ -0,0 +1,73 @@
1 + #!/usr/bin/env python
2 + # -*- coding: utf-8 -*-
3 +
4 +
5 + """
6 + factory.py: 工廠方法模式的範例程式
7 +
8 + Author: Timmy
9 + Copyright: Copyright 2022, Timmy
10 + 授權方式: MIT
11 + 版本: 1.0
12 + """
13 +
14 +
15 + class 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 +
23 + class 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 +
31 + class EnglishLocalizer: # 定義 EnglishLocalizer 類別
32 + def localize(self, msg): # 定義 localize 方法
33 + return msg # 傳回原本的 msg,即不進行轉換
34 +
35 +
36 + class 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 +
44 + def 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 +
58 + def 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 +
72 + if __name__ == "__main__":
73 + main()
Newer Older