39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
import fnmatch
|
|
from typing import Dict, List
|
|
|
|
import lxml.cssselect
|
|
import lxml.etree
|
|
from lxml.etree import _Element as Element
|
|
|
|
_libconf_namespaces = [("oor", "http://openoffice.org/2001/registry")]
|
|
_libconf_ns_mapping = dict(_libconf_namespaces)
|
|
_setup_locale_selector = lxml.cssselect.CSSSelector('item[oor|path$=L10N]>prop[oor|name=ooSetupSystemLocale]>value',
|
|
namespaces=_libconf_ns_mapping)
|
|
_locale_selector = lxml.cssselect.CSSSelector('item[oor|path$=L10N]>prop[oor|name=ooLocale]>value',
|
|
namespaces=_libconf_ns_mapping)
|
|
|
|
|
|
def check_libre_locale(config_file: str, rules: Dict[str, List[str]]) -> float:
|
|
config: Element = lxml.etree.parse(config_file).getroot()
|
|
setup_locale_setting: List[Element] = _setup_locale_selector(config)
|
|
locale_setting: List[Element] = _locale_selector(config)
|
|
|
|
setup_locale_setting: str = setup_locale_setting[0].text \
|
|
if len(setup_locale_setting) > 0 \
|
|
else locale_setting[0].text
|
|
|
|
return float(any(fnmatch.fnmatchcase(setup_locale_setting, ptn) \
|
|
for ptn in rules["locale_set"]
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
path1 = "../../任务数据/LibreOffice Calc/registrymodifications.ru.xcu"
|
|
print(check_libre_locale(path1, {"locale_set": ["ru-*", "de-*", "fr-*"
|
|
, "pt-*", "es-*", "it-*"
|
|
]
|
|
}
|
|
)
|
|
)
|