4040# Extend this for your own glossary/language as needed.
4141# ---------------------------------------------------------------------------
4242FALLBACK_MAP = {
43- "accessibility" : "دسترسیپذیری" , "await" : "await" , "argument" : "آرگومان" ,
44- "async" : "ناهمگام، غیرهمگام" , "API" : "API" , "attribute" : "ویژگی، صفت، شاخصه" ,
45- "boolean" : "بولی" , "built-in" : "توکار، درونی، درونساخته" ,
46- "callback" : "کالبک، فراخوانی بازگشتی" , "character" : "نویسه" ,
47- "context management" : "مدیریت زمینه" , "class" : "کلاس" , "cache" : "نهانگاه" ,
48- "coroutine" : "همروال" , "command line" : "خط فرمان" , "community" : "کامیونیتی" ,
49- "component" : "کامپوننت" , "custom" : "سفارشی، اختصاصی" ,
50- "decorator" : "دکوراتور، آراینده" , "debugging" : "اشکالزدایی، دیباگ کردن" ,
51- "decoding" : "کدگشایی" , "deprecated" : "منسوخ، از رده خارج شده" ,
52- "dependency" : "وابستگی" , "dictionary" : "دیکشنری" , "directory" : "پوشه" ,
53- "duck-typing" : "نوعدهی اردکی" , "DOM" : "DOM" , "element" : "المان، عنصر" ,
54- "endpoint" : "پایانه" , "escape" : "خنثی کردن" , "encoding" : "کدگذاری" ,
55- "ecosystem" : "اکوسیستم" , "event" : "رویداد" , "exception" : "استثنا" ,
56- "expression" : "عبارت" , "function" : "تابع" , "f-string" : "افاسترینگ" ,
57- "generator" : "تولیدگر" , "global" : "سراسری" , "garbage collection" : "زبالهروبی" ,
58- "generic function" : "تابع عام، تابع عمومی" , "hexadecimal" : "مبنای شانزده" ,
59- "immortal" : "نامیرا" , "import" : "ایمپورت" , "immutable" : "تغییرناپذیر" ,
60- "index" : "اندیس، شماره" , "instance" : "نمونه" , "integer" : "عدد صحیح" ,
61- "interface" : "رابط" , "interpreter" : "مفسر" , "item" : "آیتم" ,
62- "iterable" : "تکرارپذیر" , "keyword" : "کلیدواژه" ,
63- "keyword argument" : "آرگومان کلیدواژهای" , "list" : "فهرست" ,
64- "list comprehension" : "درک فهرستی" , "load" : "بارگذاری" , "loader" : "بارگذار" ,
65- "local" : "محلی" , "loop" : "حلقه" , "method" : "متد" , "metaclass" : "فراکلاس" ,
66- "mock" : "ماک" , "module" : "ماژول" , "mutable" : "تغییرپذیر" ,
67- "namespace" : "نامفضا" , "object" : "شیء" , "operator" : "عملگر" ,
68- "package" : "بسته" , "parameter" : "پارامتر" , "positional" : "جایگاهی" ,
69- "property" : "ویژگی، پراپرتی، خصوصیت" , "parallelism" : "موازیسازی" ,
70- "quotation" : "علامت نقلقول" , "raise" : "پرتاب" , "return" : "بازگشت، برگرداندن" ,
71- "runtime" : "رانتایم" , "race" : "رقابت" , "scope" : "محدوده" ,
72- "shadowing" : "پوشاندن" , "stack traceback" : "ردگیری پشته" , "statement" : "دستور" ,
73- "string" : "رشته" , "syntax" : "سینتکس، نحو" , "shell" : "پوسته" ,
74- "syntactic sugar" : "قند نحوی" , "tracking" : "پیگیری" ,
75- "type" : "نوع، نوع داده، تایپ" , "thread" : "نخ" , "unit test" : "یونیت تست" ,
76- "unpacking" : "واگشایی" , "value" : "مقدار" , "variable" : "متغیر" ,
77- "wrapper" : "پوششی، دربرگیرنده" , "iterator" : "تکرارگر" ,
43+ "accessibility" : "دسترسیپذیری" ,
44+ "await" : "await" ,
45+ "argument" : "آرگومان" ,
46+ "async" : "ناهمگام، غیرهمگام" ,
47+ "API" : "API" ,
48+ "attribute" : "ویژگی، صفت، شاخصه" ,
49+ "boolean" : "بولی" ,
50+ "built-in" : "توکار، درونی، درونساخته" ,
51+ "callback" : "کالبک، فراخوانی بازگشتی" ,
52+ "character" : "نویسه" ,
53+ "context management" : "مدیریت زمینه" ,
54+ "class" : "کلاس" ,
55+ "cache" : "نهانگاه" ,
56+ "coroutine" : "همروال" ,
57+ "command line" : "خط فرمان" ,
58+ "community" : "کامیونیتی" ,
59+ "component" : "کامپوننت" ,
60+ "custom" : "سفارشی، اختصاصی" ,
61+ "decorator" : "دکوراتور، آراینده" ,
62+ "debugging" : "اشکالزدایی، دیباگ کردن" ,
63+ "decoding" : "کدگشایی" ,
64+ "deprecated" : "منسوخ، از رده خارج شده" ,
65+ "dependency" : "وابستگی" ,
66+ "dictionary" : "دیکشنری" ,
67+ "directory" : "پوشه" ,
68+ "duck-typing" : "نوعدهی اردکی" ,
69+ "DOM" : "DOM" ,
70+ "element" : "المان، عنصر" ,
71+ "endpoint" : "پایانه" ,
72+ "escape" : "خنثی کردن" ,
73+ "encoding" : "کدگذاری" ,
74+ "ecosystem" : "اکوسیستم" ,
75+ "event" : "رویداد" ,
76+ "exception" : "استثنا" ,
77+ "expression" : "عبارت" ,
78+ "function" : "تابع" ,
79+ "f-string" : "افاسترینگ" ,
80+ "generator" : "تولیدگر" ,
81+ "global" : "سراسری" ,
82+ "garbage collection" : "زبالهروبی" ,
83+ "generic function" : "تابع عام، تابع عمومی" ,
84+ "hexadecimal" : "مبنای شانزده" ,
85+ "immortal" : "نامیرا" ,
86+ "import" : "ایمپورت" ,
87+ "immutable" : "تغییرناپذیر" ,
88+ "index" : "اندیس، شماره" ,
89+ "instance" : "نمونه" ,
90+ "integer" : "عدد صحیح" ,
91+ "interface" : "رابط" ,
92+ "interpreter" : "مفسر" ,
93+ "item" : "آیتم" ,
94+ "iterable" : "تکرارپذیر" ,
95+ "keyword" : "کلیدواژه" ,
96+ "keyword argument" : "آرگومان کلیدواژهای" ,
97+ "list" : "فهرست" ,
98+ "list comprehension" : "درک فهرستی" ,
99+ "load" : "بارگذاری" ,
100+ "loader" : "بارگذار" ,
101+ "local" : "محلی" ,
102+ "loop" : "حلقه" ,
103+ "method" : "متد" ,
104+ "metaclass" : "فراکلاس" ,
105+ "mock" : "ماک" ,
106+ "module" : "ماژول" ,
107+ "mutable" : "تغییرپذیر" ,
108+ "namespace" : "نامفضا" ,
109+ "object" : "شیء" ,
110+ "operator" : "عملگر" ,
111+ "package" : "بسته" ,
112+ "parameter" : "پارامتر" ,
113+ "positional" : "جایگاهی" ,
114+ "property" : "ویژگی، پراپرتی، خصوصیت" ,
115+ "parallelism" : "موازیسازی" ,
116+ "quotation" : "علامت نقلقول" ,
117+ "raise" : "پرتاب" ,
118+ "return" : "بازگشت، برگرداندن" ,
119+ "runtime" : "رانتایم" ,
120+ "race" : "رقابت" ,
121+ "scope" : "محدوده" ,
122+ "shadowing" : "پوشاندن" ,
123+ "stack traceback" : "ردگیری پشته" ,
124+ "statement" : "دستور" ,
125+ "string" : "رشته" ,
126+ "syntax" : "سینتکس، نحو" ,
127+ "shell" : "پوسته" ,
128+ "syntactic sugar" : "قند نحوی" ,
129+ "tracking" : "پیگیری" ,
130+ "type" : "نوع، نوع داده، تایپ" ,
131+ "thread" : "نخ" ,
132+ "unit test" : "یونیت تست" ,
133+ "unpacking" : "واگشایی" ,
134+ "value" : "مقدار" ,
135+ "variable" : "متغیر" ,
136+ "wrapper" : "پوششی، دربرگیرنده" ,
137+ "iterator" : "تکرارگر" ,
78138}
79139
80140# Matches BOTH forms so both get (re)normalized to :term:`Persian <target>`:
83143# "Something" may be stale English display
84144# text left over from the source file.
85145# Group 'target' is always the real glossary-entry id to link to.
86- TERM_RE = re .compile (r':term:`(?:(?P<target_only>[^`<>]+)|[^`<>]*<(?P<target_bracketed>[^`<>]+)>)`' )
146+ TERM_RE = re .compile (
147+ r":term:`(?:(?P<target_only>[^`<>]+)|[^`<>]*<(?P<target_bracketed>[^`<>]+)>)`"
148+ )
87149
88150
89151def po_unescape (s ):
90- return s .replace (' \\ n' , ' \n ' ).replace ('\\ "' , '"' ).replace (' \\ \\ ' , ' \\ ' )
152+ return s .replace (" \\ n" , " \n " ).replace ('\\ "' , '"' ).replace (" \\ \\ " , " \\ " )
91153
92154
93155def po_escape (s ):
94- return s .replace (' \\ ' , ' \\ \\ ' ).replace ('"' , '\\ "' ).replace (' \n ' , ' \\ n' )
156+ return s .replace (" \\ " , " \\ \\ " ).replace ('"' , '\\ "' ).replace (" \n " , " \\ n" )
95157
96158
97159def parse_po_string_block (lines , i , n ):
@@ -119,8 +181,9 @@ def parse_po(text):
119181 _ , id_parts , j1 = parse_po_string_block (lines , i , n )
120182 if j1 < n and re .match (r'^msgstr\s+"' , lines [j1 ]):
121183 _ , str_parts , j2 = parse_po_string_block (lines , j1 , n )
122- entries .append ({"type" : "pair" , "msgid_parts" : id_parts ,
123- "msgstr_parts" : str_parts })
184+ entries .append (
185+ {"type" : "pair" , "msgid_parts" : id_parts , "msgstr_parts" : str_parts }
186+ )
124187 i = j2
125188 else :
126189 entries .append ({"type" : "other" , "raw" : [lines [i ]]})
@@ -146,7 +209,7 @@ def build_term_map(entries):
146209 msgstr_full = join_parts_decoded (e ["msgstr_parts" ]).strip ()
147210 if not msgid_full or not msgstr_full :
148211 continue
149- if re .search (r' [`:]' , msgid_full ) or len (msgid_full ) > 60 :
212+ if re .search (r" [`:]" , msgid_full ) or len (msgid_full ) > 60 :
150213 continue
151214 term_map [msgid_full ] = msgstr_full
152215 return term_map
@@ -167,20 +230,21 @@ def translate(term):
167230
168231 def replace_in_text (s ):
169232 def repl (m ):
170- term = m .group (' target_only' ) or m .group (' target_bracketed' )
233+ term = m .group (" target_only" ) or m .group (" target_bracketed" )
171234 translated = translate (term )
172235 if translated is None :
173236 missing .add (term )
174237 return m .group (0 ) # leave completely unchanged
175- return f':term:`{ translated } <{ term } >`'
238+ return f":term:`{ translated } <{ term } >`"
239+
176240 return TERM_RE .sub (repl , s )
177241
178242 changed_count = 0
179243 for e in entries :
180244 if e ["type" ] != "pair" :
181245 continue
182246 msgstr_full = join_parts_decoded (e ["msgstr_parts" ])
183- if ' :term:`' not in msgstr_full :
247+ if " :term:`" not in msgstr_full :
184248 continue
185249 new_full = replace_in_text (msgstr_full )
186250 if new_full == msgstr_full :
@@ -217,8 +281,9 @@ def main():
217281 sys .exit (1 )
218282
219283 in_path = sys .argv [1 ]
220- out_path = sys .argv [2 ] if len (sys .argv ) > 2 else re .sub (
221- r'\.po$' , '.fixed.po' , in_path )
284+ out_path = (
285+ sys .argv [2 ] if len (sys .argv ) > 2 else re .sub (r"\.po$" , ".fixed.po" , in_path )
286+ )
222287
223288 with open (in_path , encoding = "utf-8" ) as f :
224289 text = f .read ()
@@ -239,4 +304,4 @@ def main():
239304
240305
241306if __name__ == "__main__" :
242- main ()
307+ main ()
0 commit comments