[ASP.NET] Meertalig *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Tweakers,

Momenteel ben ik bezig om mijn website meertalig te maken. Ik doe dit met behulp van Resources files. Ik maak dan gebruik van global en local resources. Mijn default bestanden zijn in het engels, en ik heb als toevoeging ook een Nederlandse en Engelse versie(Dus naast me default heb ik ook echt EN bestanden). Ik stel me taal in op Nederlands en alles is netjes Nederlands.

Het probleem is wanneer ik kies voor Engels dat het de taal die C# aflevert netjes in het engels is, echter de labels van mij asp pagina blijven gewoon in het Nederlands. Verwijder ik mijn nl bestanden, gaat hij wel terug naar engels(de default bestanden). Ik vraag me af wat ik verkeerd doe.

Ik stel zo mijn taal in
C#:
1
2
Thread.CurrentThread.CurrentUICulture   = new CultureInfo(language);
//language is in dit geval een string, zoals "nl" of "en"

In c# roep ik zo de vertalingen op
C#:
1
2
Resources.global.errors
//Ik heb een global resource file met daarin een woord errors


In mijn asp pagina, wat dus niet goed werkt roep ik zo een vertaling op
ASP:
1
<asp:Label ID="lblTitle" runat="server" Text="<%$ Resources:assignment,title %>"></asp:Label>


Ik kwam ook tegen dat hij de taal overneemt van je browser, echter moest je dit wel als waarde meegeven in je webconfig en die kan ik nergens vinden...

Wat doe ik fout?

Edit: Admin, kan je even me titel aanpassen, zie nu net dat deze een N teveel heeft :+

[ Voor 3% gewijzigd door BlackHawkDesign op 29-04-2009 13:25 ]


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Waarom zet je eerst de taal van je thread zelf? Die is standaard al aanwezig.

Verder is je aanroep naar de vertaling gewoon goed voor een global resource.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Hoe moet ik dan me taal instellen? Ik moet toch ergens aangeven welke taal ik wil?

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

Het setten van de Thread:
C#:
1
2
3
CultureInfo currentCulture = new CultureInfo(cultureStrings[_languageid], true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;


Het assignen van een Resourcekey aan je control:
XML:
1
2
<asp:Literal ID="lit1" runat="server" Text="Bliep" 
meta:resourcekey="NaamVanjeResource"></asp:Literal>


offtopic:
voor een topic title aanpassing: maak een topic report aan!

[ Voor 34% gewijzigd door TeeDee op 29-04-2009 13:42 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
BlackHawkDesign schreef op woensdag 29 april 2009 @ 13:22:
Edit: Admin, kan je even me titel aanpassen, zie nu net dat deze een N teveel heeft :+
Doe dan voortaan even een TR (TopicReport, Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif linksboven in de pagina) ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
C#:
1
2
3
CultureInfo currentCulture = new CultureInfo(cultureStrings[_languageid], true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;


Moet dit nog op een specifieke plek? Ik heb het namelijk nu in me languageController class, Echter krijg ik de foutmelding :
code:
1
System.NotSupportedException: Cultuur en is een neutrale cultuur. Deze kan niet voor het indelen en parseren worden gebruikt en kan daarom niet als de huidige cultuur van de thread worden ingesteld. bij System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture) bij System.Threading.Thread.set_CurrentCulture(CultureInfo value) bij Language.setLanguage(String language) in a:\src\App_Code\modules\language\language.controller.cs:regel 54


XML:
1
2
<asp:Literal ID="lit1" runat="server" Text="Bliep" 
meta:resourcekey="NaamVanjeResource"></asp:Literal>

Bliep is de default tekst, en resourcekey is dus het element? Hoe geef ik dan aan dat het uit een global resource moet komen?

Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Waar haal je die _languageid dan vandaan? Die zit bij mij gewoon in System.Globalization.CultureInfo.CurrentUICulture

Global resource kun je aangeven op de manier zoals je zelf al deed ;)

[ Voor 23% gewijzigd door The_Ghost16 op 29-04-2009 14:11 ]


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
@Roblll: Ja ik was al op zoek maar kon het niet zo heel snel vinden, teedee wees me er al op. Bedankt voor de wijziging :)

@the ghost
Hoe bedoel je waar haal ik die id vandaag?

Mijn implementatie is zo:

C#:
1
2
3
CultureInfo currentCulture = new CultureInfo("en", true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture; ;

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

BlackHawkDesign schreef op woensdag 29 april 2009 @ 14:08:
code:
1
System.NotSupportedException: Cultuur en is een neutrale cultuur. Deze kan niet voor het indelen en parseren worden gebruikt en kan daarom niet als de huidige cultuur van de thread worden ingesteld. bij System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture) bij System.Threading.Thread.set_CurrentCulture(CultureInfo value) bij Language.setLanguage(String language) in a:\src\App_Code\modules\language\language.controller.cs:regel 54
en-GB ipv van en (dus ook nl-NL in plaats van nl)
Kwestie van even het e.e.a. opzoeken en de documentatie doornemen.
The_Ghost16 schreef op woensdag 29 april 2009 @ 14:10:
Waar haal je die _languageid dan vandaan? Die zit bij mij gewoon in System.Globalization.CultureInfo.CurrentUICulture
Denk dat dat mijn ongewijzigde stukje code is ;)

[ Voor 12% gewijzigd door TeeDee op 29-04-2009 14:20 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
BlackHawkDesign schreef op woensdag 29 april 2009 @ 14:16:
@Roblll: Ja ik was al op zoek maar kon het niet zo heel snel vinden, teedee wees me er al op. Bedankt voor de wijziging :)

@the ghost
Hoe bedoel je waar haal ik die id vandaag?

Mijn implementatie is zo:

C#:
1
2
3
CultureInfo currentCulture = new CultureInfo("en", true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture; ;
Met dat stukje code is je taal altijd engels. Dat is niet wat je wilt want dan is je site niet meertalig.

Je moet juist uitgaan van de systeem taal. Dat is dus ook wat je voor elkaar wilt krijgen.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Dat snap ik :), dit is ook een simpel voorbeeldje. In werkelijkheid is het een string genaamd language die ik meegeef aan de functie waar dit stukje code wordt uitgevoerd.

Ondertussen is het dus niet en maar en-GB, maar hij blijft gewoon Nederlands.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

Misschien kan je eens wat basic tutorials doornemen. Bijvoorbeeld deze.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
kun je niet in debug mode draaien en dan kijken waar hij wat ophaalt dmv breakpoints. Op die manier kun je ook beter vinden waar het eventueel fout gaat. Want op dit moment weet ik het ook ff niet.

Ben momenteel er zelf ook mee bezig op me werk maar niet aan de hand van resource files maar een resource tabel in de database.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Hoe wil je dit precies gaan debuggen dan? Me culture geeft aan dat hij engels is, echter blijft die asp pagina alles in het Nederlands aangeven. (Wanneer in in c# zeg, Resources.global.noErrors print, geeft hij wel netjes No errors terug)

Wanneer ik in die asp pagina boven deze eigenschappen meegeef: UICulture="en" Culture="en-GB" dan gaat hij wel over naar het engels. Maar ik wil dat gewoon in me code kunnen regelen..

In alle tutorials die ik heb gelezen (stuk of 5/6 nu), wordt me gewoon vertelt zoals ik het hierboven aangeef. Ook in me c# boek wat ik er maar bij heb gepakt staat het zo uitgelegd. Alleen is het c# en geen asp, dus dat gedeelte van het asp niet.

Edit : Als ik me browsertaal op engels zet, wordt meneer wel engels. Ergens wordt dus voor asp bepaald dat dit automatisch moet zijn :S. Waar want als ik in me hele solution zoek op auto, vind hij niks terug wat relevant is.

[ Voor 14% gewijzigd door BlackHawkDesign op 29-04-2009 15:16 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

offtopic:
Het is 'mijn' of m'n, niet 'me'

Misschien moet je een method overriden? Iets als, oe, de InitializeCulture()?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
BlackHawkDesign schreef op woensdag 29 april 2009 @ 15:14:
Edit : Als ik me browsertaal op engels zet, wordt meneer wel engels. Ergens wordt dus voor asp bepaald dat dit automatisch moet zijn :S. Waar want als ik in me hele solution zoek op auto, vind hij niks terug wat relevant is.
Dit is volgens mij ook het gewenste gedrag.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Waarom zou ik dan eigenlijk nog dit doen?

C#:
1
2
3
CultureInfo currentCulture = new CultureInfo("en-GB", true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture; ;


Je kan daar netjes je taal zetten, maar asp gebruikt toch je browsertaal. Dat is toch omslachtig?

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

BlackHawkDesign schreef op woensdag 29 april 2009 @ 15:22:
Waarom zou ik dan eigenlijk nog dit doen?

C#:
1
2
3
CultureInfo currentCulture = new CultureInfo("en-GB", true);
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture; ;


Je kan daar netjes je taal zetten, maar asp gebruikt toch je browsertaal. Dat is toch omslachtig?
1: Je hebt misschien ook mensen die hun browsertaal of niet ingesteld hebben of op engels maar toch de website in het Nederlands willen lezen?
2: Misschien heb je een pagina waar je deze taal in kan stellen. Dan zal je dat ook in codebehind moeten setten.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Ja en dat wil ik ook,

Maar als ik die code gebruik negeert hij het...

p.s: Ik maakte een foutje, ook al zet in de browsertaal van firefox naar engels, evengoed toont de website in het nederlands (mogelijk opgemaakt uit mijn besturingssysteem).

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Waar in je codebehind doe je de thread Culture instellen? Want zoals TeeDee als aangeeft, hoor je dit volgens Microsoft te doen door de InitializeCulture te overriden.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Oke ik snap wat je bedoelt, jullie hebben wel flink geduld met me gehad. :P

Wat ik dus wil is een defaultPage met daarin een functie zoals dit:

C#:
1
2
3
4
5
6
7
8
9
10
protected override void InitializeCulture(){
        String selectedLanguage = HttpContext.Current.Session["language"];
        UICulture = selectedLanguage ;
        Culture    = selectedLanguage ;

        Thread.CurrentThread.CurrentCulture =  CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);

    base.InitializeCulture();
}


Vervolgens laat ik al mijn pagina's die voor members zijn van deze defaultPage overerven. Zodra de gene inlogt, wordt uit de database de gekozen taal van de gebruiker in de sessie gepropt. En klaar is BHD.

De reden waarom ik het niet snapte was dat bij mij er niet helemaal inging dat ik een functie moet overschrijven om een taal te setten. Ik dacht dat je gewoon simpel language.setLanguage(language) kon doen.

BigBeng en ook vooral Teedee, bedankt dat je het me even uit wilde leggen. Het duurde even voordat ik de logica inzag. Thnx mannen.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:55

TeeDee

CQB 241

Als extra: Leesvoer ;)

Ik vermoed dat veel tutorials daar inderdaad niet op ingaan. Daarom: altijd een crossreference met of naar de msdn. Het InitializeCulture verhaal had je kunnen vinden door [google=asp.net set culture]

offtopic:
hmm, misschien teveel het woord misschien gebruikt..

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1