mirror of
https://github.com/snowykami/mbcp.git
synced 2026-01-26 05:32:03 +00:00
📝 测试文档部署
This commit is contained in:
123
liteyuki_autodoc/i18n.py
Normal file
123
liteyuki_autodoc/i18n.py
Normal file
@@ -0,0 +1,123 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Internationalization module.
|
||||
"""
|
||||
from typing import Optional, TypeAlias
|
||||
|
||||
NestedDict: TypeAlias = dict[str, 'str | NestedDict']
|
||||
|
||||
i18n_dict: dict[str, NestedDict] = {
|
||||
"en" : {
|
||||
"docstring": {
|
||||
"args" : "Args",
|
||||
"return" : "Return",
|
||||
"attribute": "Attribute",
|
||||
"raises" : "Raises",
|
||||
"example" : "Examples",
|
||||
"yields" : "Yields",
|
||||
},
|
||||
"src": "Source code",
|
||||
},
|
||||
"zh-Hans": {
|
||||
"docstring": {
|
||||
"args" : "参数",
|
||||
"return" : "返回",
|
||||
"attribute": "属性",
|
||||
"raises" : "引发",
|
||||
"example" : "示例",
|
||||
"yields" : "产出",
|
||||
},
|
||||
"src": "源码",
|
||||
},
|
||||
"zh-Hant": {
|
||||
"docstring": {
|
||||
"args" : "參數",
|
||||
"return" : "返回",
|
||||
"attribute": "屬性",
|
||||
"raises" : "引發",
|
||||
"example" : "示例",
|
||||
"yields" : "產出",
|
||||
},
|
||||
"src": "源碼",
|
||||
},
|
||||
"ja" : {
|
||||
"docstring": {
|
||||
"args" : "引数",
|
||||
"return" : "戻り値",
|
||||
"attribute": "属性",
|
||||
"raises" : "例外",
|
||||
"example" : "例",
|
||||
"yields" : "生成",
|
||||
},
|
||||
"src": "ソースコード",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def flat_i18n_dict(data: dict[str, NestedDict]) -> dict[str, dict[str, str]]:
|
||||
"""
|
||||
Flatten i18n_dict.
|
||||
Examples:
|
||||
```python
|
||||
{
|
||||
"en": {
|
||||
"docs": {
|
||||
"key1": "val1",
|
||||
"key2": "val2",
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
to
|
||||
|
||||
```python
|
||||
{
|
||||
"en": {
|
||||
"docs.key1": "val1",
|
||||
"docs.key2": "val2",
|
||||
}
|
||||
}
|
||||
```
|
||||
Returns:
|
||||
"""
|
||||
ret: dict[str, dict[str, str]] = {}
|
||||
|
||||
def _flat(_lang_data: NestedDict) -> dict[str, str]:
|
||||
res = {}
|
||||
for k, v in _lang_data.items():
|
||||
if isinstance(v, dict):
|
||||
for kk, vv in _flat(v).items():
|
||||
res[f"{k}.{kk}"] = vv
|
||||
else:
|
||||
res[k] = v
|
||||
return res
|
||||
|
||||
for lang, lang_data in data.items():
|
||||
ret[lang] = _flat(lang_data)
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
i18n_flat_dict = flat_i18n_dict(i18n_dict)
|
||||
|
||||
|
||||
def get_text(lang: str, key: str, default: Optional[str] = None, fallback: Optional[str] = "en") -> str:
|
||||
"""
|
||||
Get text from i18n_dict.
|
||||
Args:
|
||||
lang: language name
|
||||
key: text key
|
||||
default: default text, if None return fallback language or key
|
||||
fallback: fallback language, priority is higher than default
|
||||
Returns:
|
||||
str: text
|
||||
"""
|
||||
if lang in i18n_flat_dict:
|
||||
if key in i18n_flat_dict[lang]:
|
||||
return i18n_flat_dict[lang][key]
|
||||
|
||||
if fallback is not None:
|
||||
return i18n_flat_dict.get(fallback, {}).get(key, default or key)
|
||||
else:
|
||||
return default or key
|
||||
Reference in New Issue
Block a user