[C#]embedded resources & localization

Pagina: 1
Acties:

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Ik ben bezig met een applicatie waar ook wat localization voor nodig is. Ik heb een aantal text bestanden waar op een bepaalde manier de text in staat. Met behulp van een ResourceWriter heb ik hier .resources bestanden van gemaakt.

Nu wil ik deze graag in mijn project aan kunnen spreken dus ik heb ze toegevoegd aan mijn vs.net ( 2005) project en ze staan op embedded resource als build action.

Nu maak ik een resource manager aan en probeer een string uit te lezen. Het probleem is dat wanneer ik de resourcemanager vertel dat hij de resources uit de assembly moet gebruiken dat de localization niet meer werkt. Vertel ik hem dat hij dezelfde bestanden van de hd moet gebruiken dan werkt het wel gewoon.

Als ik hetzelfde probeer met 2 resx bestanden die in visual studio zelf gemaakt zijn dan werkt het wel gewoon goed.

Ik gebruik de volgende code om gelocaliseerde text uit de assembly te halen.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace ResourceTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            //ResourceManager m = ResourceManager.CreateFileBasedResourceManager("test", @"c:\src\tools\resourcetest\", null);
            ResourceManager m = new ResourceManager("ResourceTest.test", Assembly.GetExecutingAssembly());
            string s = m.GetString("TestString", new CultureInfo("nl-NL"));
            Console.WriteLine(s);
            s = m.GetString("TestString", new CultureInfo("fr-FR"));
            Console.WriteLine(s);
        }
    }
}

Als ik de eerste uitgecomentarieerde regel gebruik om de Resourcemanager te instantieeren gebruik dan werkt het allemaal goed. Als ik echter de resources uit de assembly probeer te laden dan krijg ik altijd de text van de default culture.

Ik heb de volgende resource files in mijn project staan

1. test.resources
2. test.fr.resources

Weet iemand mischien waarom hij het niet goed wil doen. Ik heb het idee dat ik iets heel simpels over het hoofd zie.

“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: 14-02 20:35
Zijn die resource files gecompiled in sattelite assemblies ? Maw, heb je in je bin directory een aantal subdirectories (voor iedere culture die je ondersteunt 1, met daarin de resource dll's ? )

Moeten die resource files die je aan je project toevoegt, niet de extensie resx hebben ? (XML resource formaat), zodanig dat die kunnen gecompileerd worden in een satellite assembly (je IDE zal dat doen denk ik dmv resgen tool)

Voor het maken van de resx files, zal je moeten gebruik maken van de <code>ResXResourceWriter</code> class ipv de <code>ResourceWriter</code> class.

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Als ik .resx files gebruikt doet hij het inderdaad wel. Het vreemde vindt ik wel dat hij wel de .resources file in de Assembly embed aangezien ik hem wel kan uitlezen. Alleen het localization part is weg op de een of andere manier.

In de msdn vindt ik ook de volgende text
Only .resources files should be embedded in common language runtime assemblies and
satellite assemblies. The Resource File Generator (Resgen.exe) converts text (.txt)
files and XML-based resource (.resx) files into .resources files by wrapping methods
implemented by the ResourceReader, ResourceWriter, ResXResourceReader, and
ResXResourceWriter classes. You can also use Resgen.exe to convert .resources files
back into .resx and .txt files.
Nou snap ik wel dat vs.net waarschijnlijk de resx files alsnog omtovert naar .resources files maar dan zou je toch ook verwachten dat je die meteen zou kunnen gebruiken.

Verder kon ik geen documentatie vinden die verklaart waarom het met .resources files maar gedeeltelijk werkt.

“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.”