Lokalisointi - Luento 22
- Luentotaltiointi
- Lokalisointi resx-tiedostoilla
- Lokalisointi LocBaml-työkalulla
- Commands
- Avustus
- Lisätietoa
Käydään läpi miten WPF-sovelluksesta saadaan "helposti" monikielinen. Luennon loppupuolella Mikko Punkari esittelee graafisten java appletien ohjelmointia.
Lokalisointi resx-tiedostoilla
- Luo normaali WPF-ohjelma
- Lisää Properties-kansion alta löytyvään resources.resx-tiedostoon haluamasi käännettävät tiedot. Muista valita Access Modifieriin arvo public.
- Lisää XAML-tiedostoon nimiavaruusmääritys:
xmlns:properties="clr-namespace:oman_projektin_nimi.Properties"
- Viittaa XAMLissa käännettävään resurssiin:
<Button Name="button1" Content="{x:Static properties:Resources.buttonin_teksti}"></Button>
buttonin_teksti on tässä resurssitiedostossa olevan resurssin nimi.
Huomaa, että viittaus ei välttämättä toimi (designer herjailee) ennen kuin olet kertaalleen kääntänyt ohjelmasi.
Jos saat omituisen virheen liittyen metadataan niin siirrä projektisi verkkolevyltä lokaalille c:-asemalle MyTemp-kansioon ja yritä sieltä uudelleen.
- Voit viitata myös koodissa
button1.Content = Properties.Resources.buttonin_teksti;
- Kopioi resurssitiedosto Propertiesin alle uudelle nimelle. Tee kopiointi suoraan Solution Explorerissa (ctrl-c / ctrl-v). Jos haluat kääntää esim. suomeksi niin anna uuden tiedoston nimeksi Resources.fi-FI.resx. Jos englanniksi niin uusi nimi on Resources.en-US.resx jne. Älä nimeä uudelleen alkuperäistä Resources.resx-tiedostoa.
- Käännä uudessa resurssitiedostossa olevat tekstit
- Lisää App.xaml.cs-tiedostoon konstruktori, joka määrää käytettävän kielen:
public App() { localization_resx.Properties.Resources.Culture = new CultureInfo("en-US"); }
localization_resx on projektisi nimi!
Joudut lisäämään myös using System.Globalization;
- Kokeile ohjelmaasi. Vaihda kieltä vaihtamalla konstruktorissa CultureInfon parameteriksi fi-FI tai jokin muu kieli.
Lokalisointi LocBaml-työkalulla
Seuraava ohje pohjautuu suoraan Microsoftin How to: Localize an Application -ohjeeseen.
- Ohjelma tehdään normaalisti valmiiksi kuitenkin muistaen seuraavat seikat:
- Kaikki käännettävä teksti on syytä pitää XAML-tiedostossa
- Tee käyttöliittymästä skaalautuva koska eri kielet vievät eri määrän tilaa
- Määritä oletuskieleksi englanti (tai jokin muu) lisäämällä/muuttamalla projektisi .csproj-tiedostoon rivi:
<UICulture>en-US</UICulture>
- Generoi XAML-tiedostoihisi Uidt ajamalla komentoriviltä:
C:\MyTemp\visualstudio\Projects\localization\localization>c:\winnt\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:updateuid localization.csproj
Tarkista oikea polku msbuild-ohjelmaan, koska polku riippuu koneellesi asennetun .NET-kirjaston versiosta.
Tarkista, että Uidt ovat kunnossa ajamalla vielä:
C:\MyTemp\visualstudio\Projects\localization\localization>c:\winnt\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:checkuid localization.csproj
msbuildin ajamisen pitäisi tulostaa jotain seuraavanlaista:
C:\MyTemp\visualstudio\Projects\localization\localization>c:\winnt\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:updateuid localization.csproj Microsoft (R) Build Engine Version 4.0.30319.1 [Microsoft .NET Framework, Version 4.0.30319.1] Copyright (C) Microsoft Corporation 2007. All rights reserved. Build started 15.11.2010 12:05:57. Project "C:\MyTemp\visualstudio\Projects\localization\localization\localization.csproj" on node 1 (updateuid target(s)). UpdateUid: Checking Uids in file 'MainWindow.xaml' ... Checking Uids in file 'App.xaml' ... Uids updated in 2 files. Done Building Project "C:\MyTemp\visualstudio\Projects\localization\localization\localization.csproj" (updateuid target(s)). Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:00.09 C:\MyTemp\visualstudio\Projects\localization\localization>c:\winnt\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:checkuid localization.csproj Microsoft (R) Build Engine Version 4.0.30319.1 [Microsoft .NET Framework, Version 4.0.30319.1] Copyright (C) Microsoft Corporation 2007. All rights reserved. Build started 15.11.2010 12:06:06. Project "C:\MyTemp\visualstudio\Projects\localization\localization\localization.csproj" on node 1 (checkuid target(s)). CheckUid: Checking Uids in file 'MainWindow.xaml' ... Checking Uids in file 'App.xaml' ... Uids valid in 2 files. Done Building Project "C:\MyTemp\visualstudio\Projects\localization\localization\localization.csproj" (checkuid target(s)). Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:00.09
- Nyt pitäisi kaikista XAML-tiedostojen elementeistä löytyä x:Uid-attribuutti:
<Window x:Uid="Window_1" x:Class="localization.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid x:Uid="Grid_1"> <Button x:Uid="button1" Content="Painike" Height="23" HorizontalAlignment="Left" Margin="148,160,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> <TextBlock x:Uid="textBlock1" Height="118" HorizontalAlignment="Left" Margin="109,19,0,0" Name="textBlock1" Text="lorem ipsumia suomeksi" VerticalAlignment="Top" Width="172" /> </Grid> </Window>
- Käännä ohjelmasi. Debug-kansioon pitäisi nyt ilmestyä oletuskielen mukaan nimetty en-US-kansio (tai minkä sitten merkitsitkin oletuskieleksi).
- Seuraavaksi tarvitset LocBaml-työkalun. Hae LocBamlin lähdekoodi ja käännä LocBaml joko visual studiolla tai komentoriviltä msbuild-komennolla:
C:\MyTemp\visualstudio\Projects\LocBaml\CSharp>c:\WINNT\Microsoft.NET\Framework\v4.0.30319\MSBuild LocBaml_SDK.csproj
- Kopioi LocBaml.exe oman sovelluksesi debug-kansioon
C:\MyTemp\visualstudio\Projects\LocBaml\CSharp\bin\Debug>copy LocBaml.exe c:\MyTemp\visualstudio\Projects\localization\localization\bin\Debug\
LocBaml.exen täytyy olla samassa kansiossa missä käännetty ohjelmasi sijaitsee.
- Seuraavaksi tehdään LocBaml-työkalulla CSV-tiedosto jota muokkaamalla voidaan kääntää ohjelmasi eri kielillä:
C:\MyTemp\visualstudio\Projects\localization\localization\bin\Debug>LocBaml.exe /parse fi-FI\localization.resources.dll /out:localization.csv
- CSV-tiedosto sisältää seitsemän kenttää:
- BAML-resurssin nimi
- Resurssin tunniste
- Tyyppi
- Readability eli onko resurssi kääntäjän luettavissa vai ei
- Modifiability eli voidaanko resurssia muuttaa
- Kommentit
- Käännettävä tieto
CSV-tiedosto voi näyttää esim. seuraavalta:
localization.g.fi-FI.resources:mainwindow.baml,Window_1:System.Windows.Window.Title,Title,True,True,,Oma Ohjelma localization.g.fi-FI.resources:mainwindow.baml,button1:System.Windows.Controls.ContentControl.Content,Button,True,True,,Painike localization.g.fi-FI.resources:mainwindow.baml,textBlock1:System.Windows.Controls.TextBlock.Text,Text,True,True,,lorem ipsumia suomeksi
- Käännä CSV-tiedostosta haluamasi kohdat suomenkielelle.
- Luo debug-kansioon uusi kansio suomea varten eli fi-FI-niminen kansio
- Muunna CSV-tiedosto DLL-tiedostoksi:
LocBaml.exe /generate en-US/localization.resources.dll /trans:localization.csv /out:.\ /cul:fi-FI
Komennossa viittaat alkuperäiseen dll-tiedostoon (en-US/localization.resources.dll), kääntämääsi csv-tiedostoon (localization.csv) ja kerrot mihin kansioon uusi dll-tiedosto sijoitetaan (.\ eli oletuskansio) ja kerrot mitä kieltä varten (fi-FI) uusi DLL on.
- siirrä uusi localization.resources.dll fi-FI-kansioon
- Nyt voit kokeilla toimiiko uusi kieli. Lisää sovelluksesi app.xaml.cs-tiedostoon App-luokan konstruktoriksi seuraava:
public App() { CultureInfo ci = new CultureInfo("fi-FI"); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; }
Kieli on pakko määritellä jo näin aikaisessa vaiheessa ohjelman suoritusta
- Nyt voit kääntää ohjelmasi ja kokeilla ovatko tekstit suomeksi. Muuta edelliseen konstruktoriin kieleksi takaisin en-US ja käännä ja käynnistä ohjelmasi uudelleen. Nyt pitäisi tekstien olla taas englanniksi.
Localization comments
Localization attributes
Käyttäjien kommentit