Lokalizace   zodpovězená otázka

C#, VB.NET, Architektura, WinForms

Dobrý den,

vím že toto téma se tu již probíralo, ale přesto se ještě zeptám.

Chtěl bych používat lokalizaci ve formu.

Form:

1) Localizable = true

2) Na form přidám prvky(buttony,labely ...)

3) Změním vlastnost text pro jazyk default

4) Přepnu se z default do English(United states)

5) Změním vlastnosti text u všech prků

Přibude resX soubor s lokalizací

V aplikaci pak můžu změnit CurrentCulture a měly by se přepsat všechny .text na formu.

Ale není to tak.

Mohl by někdo nakopnout proč ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Default je neutrální jazyková kultura, která se použije, pokud nejsou nalezeny lokalizované resources. Ve většině případů je tedy Default (neutrální, výchozí) jazyková kultura angličtina a do žádného English (United States) se tedy nic nepřepíná! Přepíná se pouze do češtiny (pokud chcete udělat českou lokalizaci). V AssemblyInfo/vlastnostech projektu je ještě potřeba nastavit, že výchozí (Default) neutrální jazyková kultura je angličtina (en-US).

Pokud změníte CurrentCulture za běhu aplikace tak to samozřejmě nic neudělá, protože inicializace ovládacích prvků (včetně načtení lokalizovaných resources) probíhá v konstruktoru formuláře pomocí metody InitializeComponent, tudíž UI kulturu aktuálního vlákna musíte nastavit ještě před zavoláním InitializeComponent.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za odpověď,

tady mám ale hodně nesrovnalostí (určitě mojí chybou)

Mám pro zkoušku pouze jeden prvek na formu a to button.

V default lng mu dám vl. text = Test button

v Czech (Czech Republic) = Testovací tlačítko

žádný jiný jazyk.

Když v designeru měním jazyk tlačítko popisku mění

Přidám konstruktor a před inicializací změním kulturu na jinou něž českou. Myslím, že by měla být tedy použita ta Defaultní.

Ale není a použije se česká. Proč?

jenom pro pořádek používám Win Vista Bussines, VS08 Pro

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jaký kód přesně používáte pro změnu kultury? Jakou máte hodnotu atributu AssemblyCulture a NeutralResourcesLanguageAttribute v souboru AssemblyInfo.vb?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro změnu kultury používám dle příručky VS2008 Pro:

'Jakákoli jiná než "cs-Cz" by měla být default
'protože v projektu není takový resx soubor
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("eN-Us")

'Lokalizovaná
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("cs-Cz")

Neutral resource není nastaven, měl by tedy být default, ale pokud to v Projektu změním na jinou culture tak je zase form pouze v default a nezmění se do lokalizace Cz

tedy pokud je nastaven na "" (none) automaticky se použije česká lokalizace, i když se ji snažím před voláním inicializace změnit.

pokud tento element změním na cokoli jiného použije se default lokalizace, i když lokalizaci změním na cs-Cz

<Assembly: NeutralResourcesLanguageAttribute("")> 

AssemblyCulture atribut v souboru není a nevím, kde ho v projektu přidat.

Celý AssemblyInfo.vb

Imports System.Resources

Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("resx2")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("")> 
<Assembly: AssemblyProduct("resx2")> 
<Assembly: AssemblyCopyright("Copyright ©  2009")> 
<Assembly: AssemblyTrademark("")> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("04e7d6bf-d176-41b5-8719-9d96426efcdf")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

<Assembly: NeutralResourcesLanguageAttribute("")> 

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha. Takže chybu máte přesně tam, kde sem myslel:

System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("cs-Cz")

CurrentCulture - nastavuje kulturu pro formátování dat a ne kulturu pro uživatelské rozhraní.

CurrentUICulture - nastavuje kulturu pro zobrazování lokalizovaných resources v uživatelském rozhraní.

System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("cs-CZ")

Dále si do AssemblyInfo doplňte informace o neutrální kultuře (pozor, nelze specifikovat subkulturu):

<Assembly: NeutralResourcesLanguageAttribute("en")>

A dávejte si pozor na názvy kultur, podle RFC specifikace jsou to první dvě písmena kultury malé, druhá dvě písmena subkultury velké: cs-CZ (Čeština - Česká republika), en-US (Angličtina - Spojené státy)

A ve VB.NET doporučuji používat My.Application.ChangeUICulture.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuji za odpověď

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback