[.NET]Multi culture zonder satellite assemblies

Pagina: 1
Acties:

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
We hebben hier een multilanguage applicatie waar we de verschillende talen in resx resource files hebben staan.

We willen deze resx files mee compilere zodat we inde applicatie d.m.v. de ResourceManager de juiste strings op kunnen halen.

Tot zover gaat het allemaal wel goed. Het probleem is dat er voor elke culture een aparte Satellite assembly gecreerd wordt. We hebben eigenlijk liever dat de resource files gewoon in de main assembly worden mee gecompileerd.

Ik kan alleen nergens vinden hoe je dit voor elkaar kan krijgen. Weet iemand mischien of en hoe het mogenlijk is om alle resource files gewoon naar de main assembly te compileren?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Ik weet niet of je gebruik maakt van VS2005 maar misschien moet je dan eens kijken naar WebDeployment van Microsoft. Hier staat een verhaal met uitleg over hoe je het aan de praat krijgt. Je kan dan aangeven dat er een merge moet plaatsvinden maar of hij dan ook de resource files merged weet ik niet omdat we er hier niet gebruik van maken. Maar ook handig omdat je configuratie voor je productie omgeving anders zal zijn dan je debug versie. Scheelt weer kopieer werk.

Skill is when luck becomes a habit.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Ja we gebruiken inderdaad Visual Studio 2005. Het mergen waar ze het daar over hebben is het samenvoegen van alle classes en pages in een assembly. Niet over culure specifieke resources. Ik heb het hier overigens over een WinForms applicatie maar dat haalt voor dit onderwerp in princiepe niet echt veel uit.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
De ResourceManager bouwt zichzelf op aan de hand van de class-type welke je meegeeft als parameter in de constructor.
Daarna mapt hij de verschillende talen aan een resx file door simpelweg de naam van de klasse te pakken en daar de culture code achter te plakken.
Wat jij wilt doen als ik het goed begrijp is dat voor iedere form nog wel een aparte resx file is, maar dat alle talen voor die form daarin staan opgeslagen in plaats van een specifieke resx file voor iedere taal.

Afgezien van het feit dat ik niet kan inzien waarom je dat uberhaupt zou willen aangezien het een de boel alleen maar onoverzichtelijker maakt. Kan je nu al rustig vertellen dat dit niet mogelijk is.
De resx file gebruikt namelijk een Key/Value manier voor het opslaan van de string in het bestand.
M.a.w. elke key mag maar 1x voorkomen in het bestand.
Wil je dus meerdere talen in 1 resx file stoppen dan moet je voor ieder property wat in de resx file gemapped is een culture code erachter zetten..... .. .
Ik kan me echt niet voorstellen dat dat is wat je wilt.


Overigens is localisatie in het winformsmodel iets wat zeer te wensen overlaat, maar dat is een ander verhaal.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
D-Raven schreef op vrijdag 29 september 2006 @ 15:46:
De ResourceManager bouwt zichzelf op aan de hand van de class-type welke je meegeeft als parameter in de constructor.
Daarna mapt hij de verschillende talen aan een resx file door simpelweg de naam van de klasse te pakken en daar de culture code achter te plakken.
Wat jij wilt doen als ik het goed begrijp is dat voor iedere form nog wel een aparte resx file is, maar dat alle talen voor die form daarin staan opgeslagen in plaats van een specifieke resx file voor iedere taal.

Afgezien van het feit dat ik niet kan inzien waarom je dat uberhaupt zou willen aangezien het een de boel alleen maar onoverzichtelijker maakt. Kan je nu al rustig vertellen dat dit niet mogelijk is.
De resx file gebruikt namelijk een Key/Value manier voor het opslaan van de string in het bestand.
M.a.w. elke key mag maar 1x voorkomen in het bestand.
Wil je dus meerdere talen in 1 resx file stoppen dan moet je voor ieder property wat in de resx file gemapped is een culture code erachter zetten..... .. .
Ik kan me echt niet voorstellen dat dat is wat je wilt.


Overigens is localisatie in het winformsmodel iets wat zeer te wensen overlaat, maar dat is een ander verhaal.
Nee je begrijpt me niet helemaal goed. Ik heb wel degelijk meerdere resx files waar alleen text key/value pairs in staan. Ik heb dus bijvoorbeeld Applicatie.resx en Applicatie.nl-NL.resx. Ik maak een resourcemanager op de volgende manier
C#:
1
ResourceManager rm = new ResourceManager( "MyNamespace.Applicatie", Assembly.GetExecutingAssembly() );

dan zet ik in mijn applicatie mijn Culture goed en dan roep ik op verschillende plekken in mijn appilcatie
C#:
1
rm.GetString( "Key" );

aan. Dit werkt allemaal goed. Maar ik wil graag van de Satellite assemblies af. Ik zou dus eigenlijk willen dat de resources in de main assembly ge-embed worden.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:08

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Dus je wilt dat de resource files niet meer als losse bestanden in je output dir komen te staan maar onderdeel worden van je exe ?
Of snap ik t nou nog steeds niet, wat je nu wilt ? (kan zijn hoor, tis vrijdag :+)

Want als je dat wilt, dan kun je bij de properties van een resx file (of andere resource file) bij build action opgeven dat het een embedded resource is.
Maar volgens mij is dit standaard al, dus ik zal er wel naast zitten met mijn aanname :+

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
D-Raven schreef op vrijdag 29 september 2006 @ 16:08:
Dus je wilt dat de resource files niet meer als losse bestanden in je output dir komen te staan maar onderdeel worden van je exe ?
Of snap ik t nou nog steeds niet, wat je nu wilt ? (kan zijn hoor, tis vrijdag :+)

Want als je dat wilt, dan kun je bij de properties van een resx file (of andere resource file) bij build action opgeven dat het een embedded resource is.
Maar volgens mij is dit standaard al, dus ik zal er wel naast zitten met mijn aanname :+
Ja dat is idd wat ik wil. Ik heb de build action al op Embedded resource staan. Maar omdat het culture specific resources zijn ( Door de culture in de naam op te nemen ) maakt hij er aparte satellite assemblies van.

Ik zal de link die gorgi_19 geeft nog even doorlezen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:08

gorgi_19

Kruimeltjes zijn weer op :9

rwb schreef op vrijdag 29 september 2006 @ 16:49:
[...]

Ja dat is idd wat ik wil. Ik heb de build action al op Embedded resource staan. Maar omdat het culture specific resources zijn ( Door de culture in de naam op te nemen ) maakt hij er aparte satellite assemblies van.

Ik zal de link die gorgi_19 geeft nog even doorlezen.
Mocht er echt geen andere oplossing zijn: de resourcemanager werkt niet zo heel lastig. Een custom resourcemanager is ook zo gemaakt :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Ik ben momenteel ook bezig met een winforms applicatie. Daarvoor heb ik een custom language manager gebruikt. Welke o.a de ResourceManager gebruikt.
Maar bij mij staan alle resx file aangeduid als embedded resource en ze komen ook niet terug in de debug/release dir.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
gorgi_19 schreef op vrijdag 29 september 2006 @ 17:02:
[...]

Mocht er echt geen andere oplossing zijn: de resourcemanager werkt niet zo heel lastig. Een custom resourcemanager is ook zo gemaakt :)
Dat was idd nu ook mijn oplossing. Ik heb gewoon een sub-class van ResourceManager gemaakt en de InternalGetResourceSet geoverload.

Deathraven:

Dan heb jij waarschijnlijk niet je files als volgt genamed
Applicatie.resx
Applicatie.nl-NL.resx
Applicatie.fr.resx

Als je deze naming convention aanhoudt waardoor de resourcemanager automatisch de juiste resource taal voor een Culture pakt dan maakt hij per resx file een satellite assembly aan. Alleen de default resx file wordt in de main assembly ge-embed.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Dat heb ik wel. En dat doettie ook.
Alleen bij mij gebeurd het dus wel.
Nu werk ik met meerdere mensen aan dit project dus het kan zijn dat iemand ergens een optie heeft aangezet ofzow waar ik niks van weet.
Wanneer ik maandag weer op mn werk ben zal ik er eens naar kijken ;)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
D-Raven schreef op vrijdag 29 september 2006 @ 18:59:
Dat heb ik wel. En dat doettie ook.
Alleen bij mij gebeurd het dus wel.
Nu werk ik met meerdere mensen aan dit project dus het kan zijn dat iemand ergens een optie heeft aangezet ofzow waar ik niks van weet.
Wanneer ik maandag weer op mn werk ben zal ik er eens naar kijken ;)
Als je dat idd zou willen kijken dan zou het mooi zijn. Als ik namenlijk een nieuw project maak en daar de resx files aan toe voeg en ik compileer dan komen er in mijn bin directory per culture een sub directory en een aparte assembly

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Ik krijg wel een subdir. maar geen assembly's... Enfin ;) tot Maandag..

Verwijderd

Nadeel van de ResourceManager oplossing in VS2005 is dat het vertaalwerk heel moeilijk uit te besteden is aan een vertaalbureau. Er zullen vast wel tools en applicaties zijn/komen die 't voor de vertaler makkelijker kan maken, maar als 't een paar centen (en een arm en een been) mag kosten zou ik 's naar Multilizer kijken.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:08

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op zaterdag 30 september 2006 @ 01:37:
Nadeel van de ResourceManager oplossing in VS2005 is dat het vertaalwerk heel moeilijk uit te besteden is aan een vertaalbureau. Er zullen vast wel tools en applicaties zijn/komen die 't voor de vertaler makkelijker kan maken, maar als 't een paar centen (en een arm en een been) mag kosten zou ik 's naar Multilizer kijken.
Hoezo? Kijk eens naar ResXEditor :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
ResxEditor is niet echt een handig programma'tje vindt ik. Maar ik heb hier zelf een eenvoudig vertaal tooltje gemaakt die wel enigsinds op ResxEditor lijkt maar waar toch iets meer mogenlijkheden in zitten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:26
Blijkbaar kan je aan de compiler die je resources built (al.exe) een embed optie meegeven. Hiermee kan je definieren dat een bepaalde resource binnen een bepaalde satellite asm moet ge-embed worden; misschien kan je hier ook gewoon opgeven dat die resources dus in je main assembly moeten geplaatst worden ?

Echter, ik vraag me af waarom je dit eigenlijk wil ? Wat is er mis met het 'hub and spoke' model, zoals dat by default gebruikt wordt ? Ik vind dit best een goede methode, aangezien het makkelijk is om bv een nieuwe resource toe te voegen, zonder dat je je app moet re-deployen.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:08

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op zaterdag 30 september 2006 @ 12:12:
Echter, ik vraag me af waarom je dit eigenlijk wil ? Wat is er mis met het 'hub and spoke' model, zoals dat by default gebruikt wordt ? Ik vind dit best een goede methode, aangezien het makkelijk is om bv een nieuwe resource toe te voegen, zonder dat je je app moet re-deployen.
Soms is het handig als je maar 1 .exe bestand hoeft te downloaden en dat te runnen, zonder alles in een folder te zetten met aparte subfolders en / of via een msi te installeren :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Ziet er ongeveer uit als de Multilizer editor van een jaar of 5 geleden...

Sindsdien zijn ze bij Multilizer een stuk verder, en bieden ze niet alleen een hoop ondersteuning voor workflow en multiuser (multi-vertaler) gebruik, maar bij .NET winforms apps ziet de vertaler ook wysiwyg welke caption etc. 'ie aan het vertalen is, en of de vertaling ook nog past op de plek waar die tekst moet staan.
Dan wordt 't opeens een stuk minder belangrijk dat een programmeur vergeten is om Label42 een echte beschrijvende naam te geven, en is de kans op vertalingen die "van het label aflopen" vele malen kleiner.

Voor kleinere projecten, of wanneer je niet al teveel talen ondersteunt is dat misschien overkill, maar voor projecten waar 't de moeite waard is verdient 't zich dubbel en dwars terug.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Kun je niet gebruikmaken van ILMerge om die satellite assemblies naderhand te mergen met de main assembly?

日本!🎌


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
_Thanatos_ schreef op zaterdag 30 september 2006 @ 23:19:
Kun je niet gebruikmaken van ILMerge om die satellite assemblies naderhand te mergen met de main assembly?
Dat ziet er idd wel interesant uit. Ik zal er morgen eens naar kijken of het daar mee wil lukken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Ok, de reden waarom ik wel subdirs maar geen assembly krijg, omdat we tot nu toe alleen de taal nederlands hebben ingesteld. Blijkbaar creeert hij dan wel de NL-nl subdirectory, maar niet de assemblie's omdat die (vanwege het feit dat bij ons NL-nl standaard is) in de main assemblie wordt opgenomen.
Als we de engelse taal toevoegen dan krijgen wij ook satellite assemblies.
Fijn systeem dit... :+

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
D-Raven schreef op maandag 02 oktober 2006 @ 09:33:
Ok, de reden waarom ik wel subdirs maar geen assembly krijg, omdat we tot nu toe alleen de taal nederlands hebben ingesteld. Blijkbaar creeert hij dan wel de NL-nl subdirectory, maar niet de assemblie's omdat die (vanwege het feit dat bij ons NL-nl standaard is) in de main assemblie wordt opgenomen.
Als we de engelse taal toevoegen dan krijgen wij ook satellite assemblies.
Fijn systeem dit... :+
Met ILMerge kan ik idd wel de assemblies samenvoegen. Ik heb alleen niet meer geprobeerd of het resource verhaal dan nog werkt aangezien ik nu toch al een custom resource manager heb gemaakt die in de main assembly de juiste resources zoekt aan de hand van onze eigen naming convention.

Dit is toch makkelijker omdat we anders nog een extra stap nodig hebben.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1