# HG changeset patch # User Edouard Tisserant <edouard.tisserant@gmail.com> # Date 1612886948 -3600 # Node ID 450cd01324ad112df3b3332aa83024121fc271e8 # Parent a1e2eff0bc585f688a03174004218973da558358 SVGHMI: HMI:DropDown:#langs@lang now automatically shows human readable list of languages. tests/svghmi_i18n updated accordingly. diff -r a1e2eff0bc58 -r 450cd01324ad svghmi/i18n.py --- a/svghmi/i18n.py Tue Feb 09 08:11:22 2021 +0100 +++ b/svghmi/i18n.py Tue Feb 09 17:09:08 2021 +0100 @@ -15,6 +15,11 @@ import ast import wx +# to have it for python 2, had to install +# https://pypi.org/project/pycountry/18.12.8/ +# python2 -m pip install pycountry==18.12.8 --user +import pycountry + def open_pofile(pofile): """ Opens PO file with POEdit """ @@ -92,7 +97,18 @@ translated_messages.append((msgid,translated_message)) langs = [] for lang,translation in translations: - langs.append(lang) + try: + l,c = lang.split("_") + language_name = pycountry.languages.get(alpha_2 = l).name + country_name = pycountry.countries.get(alpha_2 = c).name + langs.append("{} ({})".format(language_name, country_name)) + except: + try: + language_name = pycountry.languages.get(alpha_2 = lang).name + langs.append(language_name) + except: + langs.append(lang) + broken = False for msgid, msg in translation.iteritems(): broken = True diff -r a1e2eff0bc58 -r 450cd01324ad svghmi/i18n.ysl2 --- a/svghmi/i18n.ysl2 Tue Feb 09 08:11:22 2021 +0100 +++ b/svghmi/i18n.ysl2 Tue Feb 09 17:09:08 2021 +0100 @@ -20,7 +20,7 @@ emit "preamble:i18n" { const "translations", "ns:GetTranslations($translatable_strings)"; - > var langs = [ + > var langs = [ "default", foreach "$translations/langs/lang" { > "«.»" if "position()!=last()" > , diff -r a1e2eff0bc58 -r 450cd01324ad svghmi/widget_dropdown.ysl2 --- a/svghmi/widget_dropdown.ysl2 Tue Feb 09 08:11:22 2021 +0100 +++ b/svghmi/widget_dropdown.ysl2 Tue Feb 09 17:09:08 2021 +0100 @@ -337,11 +337,17 @@ param "hmi_element"; labels("text box button highlight"); // It is assumed that list content conforms to Array interface. -|| - content: [ - /* TODO : Support HMI:List */ - ``foreach "arg" | "«@value»", - ], - -|| + > content: + choose{ + // special case when used for language selection + when "count(arg) = 1 and arg[1]/@value = '#langs'" { + > langs + } + otherwise { + > [\n + foreach "arg" | "«@value»", + > ] + } + } + > ,\n } diff -r a1e2eff0bc58 -r 450cd01324ad tests/svghmi_i18n/svghmi_0@svghmi/svghmi.svg --- a/tests/svghmi_i18n/svghmi_0@svghmi/svghmi.svg Tue Feb 09 08:11:22 2021 +0100 +++ b/tests/svghmi_i18n/svghmi_0@svghmi/svghmi.svg Tue Feb 09 17:09:08 2021 +0100 @@ -2418,19 +2418,25 @@ inkscape:current-layer="hmi0" showgrid="false" units="px" - inkscape:zoom="0.5" - inkscape:cx="826.76877" - inkscape:cy="73.93813" - inkscape:window-width="1431" + inkscape:zoom="2" + inkscape:cx="1015.4336" + inkscape:cy="539.83485" + inkscape:window-width="1939" inkscape:window-height="844" - inkscape:window-x="3841" - inkscape:window-y="36" + inkscape:window-x="3325" + inkscape:window-y="554" inkscape:window-maximized="0" showguides="true" inkscape:guide-bbox="true" inkscape:snap-global="true" inkscape:snap-bbox="true" - inkscape:bbox-nodes="true" /> + inkscape:bbox-nodes="true"> + <sodipodi:guide + position="1265,637" + orientation="1,0" + id="guide424" + inkscape:locked="false" /> + </sodipodi:namedview> <rect style="color:#000000;fill:#ffffff" id="page0" @@ -2554,16 +2560,16 @@ </g> <g id="g14237" - inkscape:label="HMI:DropDown:orig:fr_FR:sl_SI@lang" - transform="matrix(0.81491208,0,0,0.81491208,32.392121,-516.64521)" + inkscape:label="HMI:DropDown:#langs@lang" + transform="matrix(0.81491208,0,0,0.81491208,92.392121,-676.64521)" style="stroke-width:0.35083869"> <rect style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#53676c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.75419343;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="rect14212" - width="391.99988" - height="130.9433" + width="574.92957" + height="84.312515" x="864.00842" - y="923.98993" + y="946.07819" rx="2.4558709" ry="2.4558709" inkscape:label="box" /> @@ -2571,31 +2577,31 @@ inkscape:label="highlight" ry="2.4558709" rx="2.4558709" - y="943.10553" + y="968.2616" x="864.00842" - height="92.71212" - width="391.99988" + height="39.945667" + width="574.92957" id="rect5497" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.75419331;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> <text id="text14183" - y="1011.9975" - x="881.44226" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d42aff;fill-opacity:1;stroke:none;stroke-width:0.35083869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + y="998.13739" + x="890.70056" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35.95956421px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d42aff;fill-opacity:1;stroke:none;stroke-width:0.35083869px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" inkscape:label="text"><tspan style="text-align:start;text-anchor:start;fill:#d42aff;stroke-width:0.35083869px" - y="1011.9975" - x="881.44226" + y="998.13739" + x="890.70056" sodipodi:role="line" - id="tspan421">sel_0</tspan></text> + id="tspan421">Language (Country)</tspan></text> <path sodipodi:type="star" style="opacity:1;vector-effect:none;fill:#a7a5a6;fill-opacity:1;stroke:none;stroke-width:0.12376806;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path424" sodipodi:sides="3" - sodipodi:cx="1200.5" - sodipodi:cy="975" + sodipodi:cx="1387.0236" + sodipodi:cy="977.31356" sodipodi:r1="43.683521" sodipodi:r2="21.841761" sodipodi:arg1="1.5707963" @@ -2603,7 +2609,7 @@ inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" - d="m 1200.5,1018.6835 -18.9155,-32.76262 -18.9155,-32.76264 37.831,0 37.831,0 -18.9155,32.76264 z" + d="m 1387.0236,1020.9971 -18.9156,-32.76268 -18.9155,-32.76264 37.8311,0 37.831,0 -18.9155,32.76264 z" inkscape:transform-center-y="10.92088" inkscape:label="button" /> </g>