Nyelvek használata WinCC Flexible-ben

(1. rész)
Ezen nem programozási nyelvet kell érteni, hanem a megjelenítő eszközünk által közölt információk (szövegek) nyelvét.
Ahogy a ProTool is, a WinCC Flexible is támogatja a több nyelvű projecteket. Ezek teszik lehetővé, hogy a kezelő felületünkön gyorsan és egyszerűn lehessen nyelvet váltani. Rendkívül hasznos olyan berendezéseknél, amit több, különböző anyanyelvű személyek kezelnek. Pl. exportra gyártott berendezéseket előre fel lehet készíteni a megcélzott országok nyelvére.

Elsőre azt gondolhatnánk, hogy a HMI-ben egy nyelv váltás annyit tesz, hogy egy táblázat (adatbázis) bejegyzései alapján minden szöveget kicserél. Alapvetően ez igaz is, de a több nyelv ennél azért több problémát is felvet.
Pl. a project szerkesztésekor a szövegbevitel problémáját, amikor egy a mi gépünktől eltérő nyelvű szöveget próbálunk beírni (pl. nincs is olyan billentyű amivel be lehetne írni az adott karaktert). Vagy gondoljunk arra, hogy egy nyomógomb felirat az egyik nyelven elfér a nyomógombon, de egy másik nyelven már nem. Vagy gondoljunk a betűkészletekre.  Lehet hogy egy bizonyos nyelv karaktereit az általunk használt betűkészlet nem is tartalmazza, a nyelvváltás lehetőségét is biztosítani kell a runtime-ban, stb.
Ezeket a problémákat a WinCC Flexible-ben természetesen megoldották, de ezek miatt a megoldások miatt több egy nyelvváltás a szövegek egyszerű cseréjénél.

Amikor csak magyar nyelv van

Valószínűleg az a leggyakoribb, amikor csak egy nyelvet használunk egy projectben.
Megtehetjük, hogy ilyenkor nem törődünk a nyelvekkel, egyszerűen csak létrehozzuk a projectet és elkezdjük csinálni. Sajnos a Flexible egy új project létrehozásakor nem magyar nyelvet fog beállítani, hanem olyat, amilyenre a Flexible nyelve is be van állítva. Ha nem törődünk a nyelvekkel, akkor az új projectben minden magyar nyelvű szöveget az angol vagy a német stb. nyelvhez fogjuk beírni. Ha csak az az egy nyelv van és biztos hogy később sem akarunk majd másikat beletenni, ezzel nincs gond. Gond azzal lesz, hogy a Flexible szerkesztéskor az éppen aktuálisan beállított nyelvnek megfelelő billentyűkiosztást fogja használni, tehát pl. az angolt vagy a németet. Hosszú távon ez elég bosszantó lesz. A másik mellékhatása annak ha nem törődünk a nyelvekkel az, hogy a rendszer által készen tárolt objektumok (recept szerkesztő, motion view, step view, stb) által tartalmazott fix szövegek (amiket mi nem tudunk megváltoztatni mert az objektum tartalmazza) szintén a nyelvi beállításnak megfelelő nyelven fognak megjelenni. Továbbá idegen nyelvűek lesznek a rendszer üzenetei is.

Ezért azt javaslom, hogy minden új projectben, mielőtt bármit is tennénk, először a nyelvet állítsuk be magyarra.
A nyelvet a project fa Language Settings / Project Languages szekciójában állíthatjuk be. Első lépésként tegyünk pipát a Hungarian (Hungary) nyelv elé.
Ezután az Editing language és Referenced language mezőt is állítsuk át Hungarian (Hungary)-ra, majd vegyük ki a pipát az English (United States) nyelv elől. Ezt a pipát csak akkor engedi kikapcsolni, ha az említett két mező közül egyik sem arra a nyelvre van beállítva!



Most már csak egy nyelvünk van és az a magyar. Teljes gőzzel elkezdhetjük a munkát.

Mit tegyünk, ha csak magyar nyelvet akarunk, de a kész projectben már egy másik nyelv van beállítva?

Ha magyar nyelven elkezdtük a projectet felépíteni és már előrehaladott vagy kész, de angol vagy német (vagy más) nyelv van beállítva magyar helyett, utólag is átállíthatjuk magyarra, de az már kissé nehezebb.
Mivel minden magyar nyelvű szöveg az idegen nyelvhez lett beírva, át kell azt másolnunk a magyar nyelvhez, de előbb a Projerct Languages-ben  tegyünk pipát a magyar nyelv elé: Hungarian (Hungary).
Ezután állítsuk át az Editing language és Referenced language mezőt Hungarian (Hungary)-ra.

Figyelem!
Ha ezután kivesszük a pipát a nyelv elől, amelyikben eddig a project meg volt írva, akkor a következő üzenet fog megjelenni:



Figyelmeztet, hogy az összes szöveg és grafika, amelyet az adott nyelv alatt hoztunk létre el fog veszni és a művelet nem vonható vissza az undo funkcióval.
Az angol nyelv törlése előtt tehát először át kell másolni a szövegeket.
Ha megnyitjuk a project fa Language Settings Project Texts elemét, kapunk egy táblázatot, amiben szerepel a projectben lévő összes szöveg. A táblázat oszlopaiban pedig (több nyelv esetén) beállítható melyik nyelvhez tartozó szöveg legyen látható.
Ha itt nem szerepel mindkét nyelv, vagyis az idegen nyelv amihez a magyar szövegeket beírtuk és a jelenleg még üres magyar nyelv, akkor a táblázat fejlécére jobb egérgombbal kattintva beállíthatjuk, hogy mely oszlopok jelenjenek meg. Itt felsorolja az összes aktív nyelvet:



Egyszerűen pipát kell tenni a megjelenítendő információ elé.

Fontos, hogy mikor egy új nyelvet engedélyezünk, akkor nem lesz üres az új nyelvhez tartozó összes szöveg, mivel vannak "gyári sablon" szövegek, amik minden nyelven benne vannak a Flexible-ben.
Tehát ha az angol nyelvhez vannak beírva a magyar szövegek, akkor az említett gyári szövegek angolul vannak a magyar szövegek között (németül, ha a német nyelvhez írtuk a magyar szövegeket, stb). Amikor bejelöljük a magyar nyelvet, akkor Project texts nem lesz teljesen üres, ezeket magyarul automatikusan beleteszi.
Ha az összes szöveget átmásoljuk, akkor jönni fognak a magyar szövegekkel együtt a gyári angol nyelv szövegei is. Ha ezt nem akarjuk, akkor másolás előtt a még csaknem teljesen üres magyar nyelv oszlopa szerint rendezzük sorba a táblázatot annak fejlécére kattintva, hogy a kitöltött gyári szövegek a táblázat tetején legyenek.
Ezután jelöljük ki az idegen nyelvű oszlopban (ahol a magyar szövegek vannak) az összes olyan sort, amelyikhez tartozó sor a magyar nyelvnél üres. Csak abban az egy oszlopban! Ezt úgy tehetjük meg, hogy az oszlop első olyan sorára kattintunk, amelyik sorban a magyar nyelv már üres, majd a SHIFT nyomvatartásával a táblázat utolsó sorára kattintunk.



Nyomjuk meg a másolás gombot (Ctrl-C). Ezután jelöljük ki a magyar nyelvet tartalmazó táblázatban ugyanezeket a sorokat és nyomjunk Ctrl-V-t (beillesztés).
Rendkívül fontos, hogy a másolás kezdő sora és a másik nyelvnél a beillesztés kezdő sora azonos legyen, különben az összes szövegünk eltolódik, amiből komoly káosz alakul ki!
Ha a másolás sikerült, törölhetjük az idegen nyelvet, amelyikre nincs szükség.

A jelenséget szándékosan még nem sikerült reprodukálni, de egyszer jártam úgy, hogy a fenti műveletsor eredményeképpen a szövegek megfelelően átkerültek ugyan a magyar nyelvhez, a betűk viszont elvesztették az attribútumaikat. Minden szöveg Tahoma 12 pontos lett.
A problémát úgy kerültem meg, hogy másolás után nem töröltem az angol nyelvet, csak inaktívvá tettem. Ilyen merénylet a Device Settings, Languages and Fonts-nál követhető el:



Néha az is előfordul, hogy egy új nyelv felvétele után az új nyelv megjelenik ugyan a Device Settings, Languages and Fonts listájában, de inaktív marad. Ezért amikor új nyelvet aktiválunk, ide érdemes mindig benézni minden rendben van-e.

Több nyelvű project

A nyelvek körüli hercehurca akkor lesz kényelmetlenség helyett hasznos, ha kihasználjuk a benne rejlő lehetőségeket.
Ez akkor történik meg, amikor egynél több nyelvet is használni kezdünk.
Nyilván már mindenki számára világos, hogy a több nyelvű project annyit jelent, hogy a projectben szereplő (majdnem) minden szövegnek, és grafikának amit mi adunk meg van egy-egy megfelelője minden nyelvhez. Legyen az a szöveg szimbólum listában, text listában, üzenetben, információs szövegben, vagy egyszerűen csak statikus szöveg a kijelzőn. Mivel van egy beépített funkció a nyelv választására, bármikor egyetlen gombnyomással átváltható a szövegkészlet egy másik nyelvre.

A projectben használt nyelveket a már említett Language Settings / Project Languages beállításnál választhatjuk ki. Minden nyelvet a már szintén említett Device Settings, Languages and Fonts beállításoknál lehet aktiválni, ahol nyelvenként meghatározhatjuk a betűkészletet és betűstílust is. Ezek általában minden nyelvnél egyformák. Akkor van nagy jelentőségük, amikor cirill, kínai, japán stb betűket is használunk kell.

A nyelvek között van egy kitüntetett nyelv. Ez az a nyelv, amelyikben először elkészítjük az egész projectet, az ún. Editing Language. Ez annyit jelent, hogy amikor lerakunk pl. egy nyomógombot és beírjuk milyen szöveg szerepeljen rajta, akkor ezt a szöveget az Editing Language-nél megadott nyelvhez írja be.
Több nyelvű project készítésénél erre a beállításra oda kell figyelni, mert ha nem megfelelő, akkor könnyen rossz nyelvhez kerülnek a szövegek és a fentebb leírt procedúrához hasonlatos kellemetlenséget kell elszenvednünk.

Fordítás exportálással és importálással
Először tehát elkészítjük a projectet az egyik általunk kijelölt nyelvre, teszteljük, majd ha minden jól működik, lefordítjuk a többi nyelvre is.
A több nyelv több munkával jár, hiszen a Flexible sajnos nem fogja nekünk a többi nyelvre automatikusan lefordítani a szövegeket, ezért minden egyes szöveget nekünk kell beírni az összes nyelvhez! Ezt a munkát sajnos csak egyféleképpen tudjuk elkerülni: kiadjuk másnak. Pl. egy szakfordítónak.
Mivel nem várhatjuk el a fordítótól, hogy rendelkezzen a WinCC Flexible szoftverrel (ráadásul ugyanazzal a verzióval amelyikkel elkészítettük), van mód arra, hogy a projectben szereplő szövegeket excel táblázatba exportáljuk (pontosabban CSV file-ba) és azt a táblázatot adjuk át a fordítónak.

Az export lehetőséget az Options / Texts / Export... találjuk.



Ez sem annyira egyszerű, mint amilyennek elsőre látszik. Először is meg kell adnunk hova tegye a file-okat: Storage Location (Path). File nevet nem kell megadni, mert több file-t fog létrehozni, amiket automatikusan nevez el. Itt egy üres könyvtárat érdemes megadni neki.



A Languages szekcióban két nyelvet tudunk beállítani. Source Language lesz a forrás nyelv, Target Language a cél nyelv.
Az export funkció ugyanis két nyelvet fog a CSV file-okba tenni rgymás mellé egy-egy oszlopba úgy, hogy a forrás nyelvként megjelölt nyelv szövegeit átmásolja a célként megjelöl nyelv soraiba. Ezért a forrás nyelvnek mindig azt a nyelvet adjuk meg itt, amit a project készítésekor az Editing Language-nél is megadtunk. Ellenkező esetben üres, szövegek nélküli file jön létre!
Akármennyi nyelvet is állítottunk be a projectben, mindig csak két nyelvet tudunk kiexportálni, ezért különböző könyvtárakba annyiszor kell megismételni az exportálást, amennyi nyelvünk van azon kívül amelyiken a project elkészült, minden export előtt beállítva a Target Language beállításnál a következőt.
Sajnos a nyelv kiválasztásánál az összes nyelv közül kell választani, nem csak azok közül, amelyek a projectben szerepelnek. Ráadásul amennyiben magyar Windows-t használunk, a kiválasztásnál lévő nyelvek leírása is magyar lesz. Ennek ellenére pontosan azokat a nyelveket kell megadnunk itt, amelyek a projectben szerepelnek, különben az importálásnál új nyelvek fognak aktiválódni.

A Text Display melletti Select... gomb megnyomásával lehet kiválasztani hogy milyen fajta szövegeket mentsen a CSV file-ba. Azokat menti, amelyek a jobb oldali listában vannak.
Messages: Alarmok
Screens: A képernyő objektumok szövegei
InfoHelp: Az információs szövegek
Others: minden egyéb, ami nem fér bele a fenti kategóriákba



Ha az exportálás célja a fordítás, akkor érdemes mindet beletenni a listába.
Ha mind benne van, akkor 4 file fog létrejönni:

InfoHelp.csv
Messages.csv
Others.csv
Screens.csv
Ezeket már be lehet olvasni excellel. Kb ilyen eredményt kapunk:



Ezeket a file-okat odaadjuk a fordítónak, aki átírja az idegen nyelvű oszlopban lévő szövegeket a megadott idegen nyelvre, majd visszaadja a file-t.
Nagyon a lelkére kell kötni, hogy a táblázat első hat sorához ne nyúljon, a magyar nyelvű oszlopot hagyja érintetlenül és a <text> szövegek is maradjanak változatlanok, különben nem tudjuk majd maradéktalanul vissza importálni.

Az importálás egyszerűbb, excelből kimentjük a lefordított szövegeket CSV formátumba egy üres könyvtárba úgy, hogy a file-ok nevei pontosan azok legyenek mint exportálásnál. Az importálás végén, amit az Options / Texts / Import... menüben kezdeményezhetünk, az Output ablakban lesz pár üzenet. Ezeket mindig nézzük meg (Ctrl-O) mert ha itt Error-ok vannak, akkor nem lesz minden szövegünk a helyén!



Ha exportálásnál nem jól adtuk meg a Target Language-et, akkor az import művelet aktiválni fogja azt a nyelvet. Ezért import után mindig ellenőrizni kell nyelvi beállításokat!
Sajnos ennek a módszernek elég sok buktatója van, talán egyszerűbb ha magunk írjuk be az összes nyelv szövegét.

Fordítás WinCC Flexible-ben
"Helyben" is beírkálhatjuk az idegen nyelvű szövegeket, a Flexible ebben a segítségünkre van.



Egy mondat erejéig ismét vissza kell hogy kanyarodjak a Language Settings / Project Languages beállításokhoz. Az Editing Language tehát az a nyelv, amely éppen a szerkesztőben is látható. A Reference Language pedig az, amelyikről puskázni lehet.
Ahhoz ugyanis, hogy az idegen nyelv szövegeit beírjuk, aát kell váltanunk az Editing Language-et.Ekkor viszont minden szöveg eltűnik, mivel még nincs semmi ezen a nyelven beírva. Hogy ne teljesen vaktában kelljen emlékezetből beírni az idegen nyelvű szövegeket (hogy mit is írjunk oda) segít a Reference Language. Válasszuk ki a View menüből a Reference Text pontot. Megjelenik egy Reference Text feliratú ablak.



A Reference Text ablak mindig az előtérben lesz amíg el nem rejtjük, de be is dokkolhatjuk a többi közé ha úgy kényelmesebb. A Ctrl-Shift-R billentyűkkel is bármikor ki vagy be kapcsolhatjuk.
Amikor a képernyőn egy olyan objektum akítv amelyikhez tartozik szöveg, akkor annak a Reference Language-nél beállított nyelvű megfelelője mindig meg fog jelenni a Reference Text ablakban. Így mindig látható lesz milyen szöveget kell beírni idegen nyelven az adott helyre.
Bizonyos objektumokat azonban nem elég szimplán kiválasztani, hogy a referencia szöveg megjelenjen az ablakba. A properties-ben ki kell választani azt a mezőt, ahol az objektumhoz tartozó szöveg van. Text Field-nél pl.: General/Text.
A Reference text ablakot nem kell használnunk, ha a fordítás előtt az összes reference language-ben lévő szöveget a project texts táblázatban átmásoljuk a kitöltendő idegen nyelvhez (lásd az előző fejezetben). Ilyenkor az idegen nyelvnél is a referencia nyelven írt szöveg lesz látható, amit egyszerűen át kell írnunk a másik nyelvre.

A másik mód, hogy a szövegeket a Language Settings Project Texts táblázatba írjuk be. Ebben a táblázatban a projectben lévő összes szöveg megjelenik az összes nyelven (illetve amelyik megjelenítését itt  bekapcsoltuk).
Ennek a módszernek az az előnye, hogy egyszerre látjuk az összes szöveget, így kiderül ha még valamelyik nincs lefordítva. A Reference Text módszernél könnyen kimaradhatnak szövegek a fordításbal.
Ugyanakkor a Project Texts táblázatban nem látható csak maga a szöveg, ezért nem mindig egyértelmű, hogy a szöveg mire vonatkozik, hiszen az objektumot amihez tartozik nem látjuk. Nem mindegy, hogy egy nyomógomb vagy egy állapotjelző (egyik esetben pl. "emelés", másik esetben meg "fent" szöveget célszerűbb írni).
A két módszer kombinációját javaslom.
De ha a Project Texts táblázatban meg akarjuk nézni, hogy egy szöveg mihez tartozik, akkor két lehetőségünk is van.

Az egyik a hivatkozások szöveges megjelenítése a táblázat egyik oszlopában:
A táblázat fejlécére kattintva az előbukkanó menüből ha kiválasztjuk a Referenced by pontot, máris megjelenik egy oszlopban hogy hol van az a szöveg:



Sokat segít, hogy a sor elején elhelyezi az objektum fajtájára utaló ikont is.

A másik módszer az objektumra ugrás. Ha jobb egérgombbal kattintunk a Project Texts egyik elemére, az előbukkanó menüben lesz egy Goto object pont. Ha ezt kiválasztjuk, akkor a Flexible megnyitja azt a screent (vagy bármit) egy külön fülön, ahol a kért szöveg van. Ha az egy screen objektum, akkor ki is jelöli.



Ilyen módon bármikor és gyorsan megnézhetjük, hogy az adott szöveg hol szerepel a projectben.

A project bizonyos szövegei nem egy, hanem több sorban helyezkednek el. Ha a Project Texts-ben nézzük a szövegeket, akkor mindig egy sorban látjuk azokat, akkor is, ha eredetileg több sorban vannak. Ilyen szövegekben a sor vége karakterrel jelöli hogy onnantól új sorban van a szöveg.
Fordításkor ezekre is figyelni kell, mert ha a másik nyelvnél nem alkalmazzuk őket, akkor a szöveg egy sorban szeretne megjelenni, ami valószínűleg nem sikerül (nem fér el) de ha mégis, akkor mindenképpen csúnya lesz.
Az ilyen új sor karaktereket a Shift-Enter leütésével vihetjük be.
Ha az idegen nyelvet nem a Project Texts-ben szerkesztjük, akkor ezzel nem kell foglalkozni, mert akkor úgy látjuk a szöveget ahogy az a kijelzőn majd meg fog jelenni.


A nyelv kiválasztása a runtime-ban

(2. rész)
Amikor több nyelv van, akkor nyilvánvaló, hogy biztosítani kell a nyelv választásának lehetőségét a runtime-ban (vagyis a működő panelen vagy PC-n) hogy a kezelő nyelvet válthasson.
Ez nagyon egyszerű, erre beépített funkció szolgál, aminek neve SetLanguage.
A szokásos eseményekhez rendelhető hozzá, mint szintre bármely funkció. Van egy Language paramétere, ami lehet Toggle beállítású, vagy konkrétan kijelölhető egy nyelv azok közül, amelyeket aktiváltunk:


Célszerű ezt a funkciót  nyomógombhoz rendelni.
Ha Toggle beállítást választottunk, akkor a nyomógomb minden egyes megnyomásával a következő nyelvre vált. Amikor a végére ért, kezdi elölről. Ilyenkor egy gomb elég a nyelv váltáshoz, bármennyi nyelv van beállítva.
De ha 2-nél több nyelv van, akkor szerintem hatékonyabb ha minden nyelvhez külön nyomógombot használunk. Ilyenkor  minden egyes gombhoz beállítjuk a SetLanguage funkciót és paraméterben más-más nyelvet adunk meg. Ilyenkor célszerű a nyomógombra vagy mellé olyan feliratokat tenni, amely minden nyelven érthető.



A SetLanguage funkció a következő objektumok alábbi eseményeihez rendelhető hozzá a help szerint:

ObjektumEsemény
TagValue change
Upper limit exceeded
Lower limit violated
Funkció billentyű (globális és lokális)Press
Release
Képernyő objektumokPress
Release
Click
Change (or toggle for switch)
Switch on
Switch off
Enable
Deactivate
Ütemező (scheduler)Time expired

Hát sajnos a második rész nem lett túl nagy lélegzetű, de a számításaimat keresztül húzta az a tény, hogy a Flexible nem támogatja a "Switch language" PLC job-ot. (erről is akartam írni).

Kapcsolódó írások:
Operátor penelek programozása (ProTool)
WinCC Flexible tippek



Szirty