Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to automatically generate corresponding resx files for string localization in .NET?

Using this answer, I created a sample localized app. My question is, is there some way to have Visual Studio automatically generated the strings.fr.resx file with the same strings (same names that is, with blank values), so someone who knows French can just fill them in, or do I actually have to manually create the resource for each language I want to support?

like image 773
Instance Hunter Avatar asked Feb 26 '10 21:02

Instance Hunter


People also ask

How are RESX files generated?

Resource files (. resx) are only generated with source code when building a Project in Developer Studio.

How do you regenerate a RESX file?

resx file? If so, go to project properties, then the "Resources" tab, and there should be a big link to click to regenerate it.

Do RESX files need to be deployed?

You do not need to deploy . resx file with your application.


1 Answers

You can do this with a 3rd party tool: Zeta Resource Editor

  1. Once you open Zeta Resource Editor (ZRE), you have to create a new ZRE project.
  2. Then you have to add your existing resource files into the this project.
    • To do this automatically for all resource files:
      1. Click on the "File Groups and tags" tab
      2. Click on "Automatically add multiple file groups to project" and follow the instructions.
  3. To add the new language:
    1. Highlight the appropriate node in the "Project files" tree.
    2. Click on the "File Groups and tags" tab
    3. Click on "Create new file" and follow the instructions.
    4. Make sure you include the newly created resex file into your Visual Studio project.

What's nice about using this tool is that you can also use it to export/import your translations to a spreadsheet for translations. (You can do this from the "Start" tab)


Alternatively, you could write your own small program to do this. The heart of the program is this:

using( ResXResourceReader reader = new ResXResourceReader( resourceFileName ) )
using( ResXResourceWriter writer = new ResXResourceWriter( newResourceFileName ) )
{
    foreach( DictionaryEntry entry in reader )
    {
        writer.AddResource( entry.Key.ToString(), "" );
    }

    writer.Generate();
    writer.Close();
}
like image 56
Greg Avatar answered Oct 25 '22 11:10

Greg