resource recursos net how files example c# model-view-controller globalization embedded-resource resx

c# - recursos - Generando archivos Resx para MVC



string resx c# (3)

He luchado con esto antes, pero los recursos funcionan bien. Esto puede ayudar aunque no estoy seguro. Siempre vale la pena repasar lo básico, ya que a veces es algo muy simple y los recursos de .NET pueden ser infelxibles.

Explicaré mi uso de recursos y espero que pueda aplicarlo a su escenario (realmente no puedo entender cuál es el problema exacto que se basa en su pregunta).

Pasos para configurar los recursos 1. Agregue una carpeta ASP.NET a su solución web. Haga clic derecho en la solución, seleccione Agregar> Agregar carpeta ASP.NET> Recursos_Globales_aplicaciones

  1. Agregue un archivo de recursos a la carpeta llámalo MyResourceFile.resx

  2. Abra Propiedades para archivo y seleccione

    • Build Action : Recurso incrustado
    • Herramienta personalizada : PublicResXFileCodeGenerator
  3. A continuación, agregue sus diferentes archivos de recursos para diferentes idiomas, etc. (especifique las mismas propiedades para todos los archivos de recursos, etc. Acción de compilación y herramienta personalizada)

    • MyResourceFile.en-GB.resx
    • MyResourceFile.fr-FR.resx
    • MyResourceFile.ja-JP.resx

Esto debería generar automáticamente su administrador de recursos al que se puede acceder mediante llamadas

MyResourceFile.MyResourceText

Vale la pena señalar que si no tiene una cultura instalada o está mal definida, no funcionará y obtendrá todo tipo de errores.

Etc MyResourceFile.en-JP.resx no funcionaría (a menos que crees esta cultura personalizada) y causaría todo tipo de otros problemas. Esta cultura se mapeará desde CultureInfo en la aplicación para determinar qué archivo de recursos usar, por lo tanto debe ser un CultureInfo válido.

Usamos archivos resx para la globalización, junto con búsquedas de bases de datos de cosas que pueden ser configuradas (como nombres de pestañas, que pueden ser diferentes por producto) por nuestro personal de CS, y por lo tanto no se conocen en tiempo de diseño.

Creé una herramienta personalizada que lee los archivos de resx y de forma inteligente vuelca los pares clave / valor en una base de datos relacional (haciendo coincidir los valores para que no tengamos duplicados).

Esto ha sido de gran ayuda para nuestro negocio: no tenemos que enviar cada resx para traducir (y pagar las traducciones duplicadas de palabras compartidas) y tenemos un ''estándar de oro'' con todas nuestras traducciones (en la base de datos).

La herramienta que creé también lee la base de datos, selecciona los pares clave / valor y las traducciones de cada valor, y crea archivos de texto para cada archivo resx (y la traducción de cada idioma del archivo de texto) y automatiza ejecutar resgen.exe, un comando herramienta de línea que se envía con Visual Studio, para compilar los archivos de resx a partir de los archivos de texto generados.

No tengo ninguna integración de control de fuente, así que tenemos que verificar manualmente los archivos de Resx y registrar manualmente los archivos generados al usar la herramienta, pero esto no ha sido un gran problema.

Mi problema es que este método está fallando para nuestros nuevos proyectos MVC: los proyectos MVC requieren que los archivos resx sean recursos integrados con el Modificador de acceso de ''public''.

Hasta ahora, hemos estado arreglando esto a mano, lo que introduce la posibilidad de error humano y agrega una cantidad de trabajo no trivial.

¿Hay alguna manera de obtener resgen.exe para crear archivos de recursos incrustados y públicos? Si no, ¿hay otra forma en que pueda crear archivos de resx que lo hagan?

Actualización, pregunta adicional: los archivos resx que generamos con este método también generan una advertencia:

A custom tool ''PublicResXFileCodeGenerator'' is associated with file ''(resxname)'', but the output of the custom tool was not found in the project. You may try re-running the custom tool by right-clicking on the file in the Solution Explorer and choosing Run Custom Tool.

La herramienta mencionada es la herramienta que usamos inicialmente para crear los archivos resx. ¿Hay alguna manera de evitar esta advertencia?


Terminamos encontrando una solución a este problema.

Para los proyectos de MVC, cambiamos la herramienta para usar la clase ResXResourceWriter para actualizar los archivos de resx, hacer coincidir las claves existentes y agregar nuevas según sea necesario.

Esto preserva el estado ''Recurso incrustado'', así como todos los demás detalles que se necesitan.

Todavía tenemos que configurar el archivo correctamente la primera vez que se crea, pero ese es un problema mucho más manejable.


En primer lugar, puede generar recursos como públicos utilizando la opción de línea de comando /publicClass . También vea: Resgen.exe - Resource File Generator @ msdn

En segundo lugar, no creo que pueda dejar que resgen haga que los archivos de recursos estén integrados por defecto, simplemente porque no es una propiedad de un recurso, sino una configuración del proyecto.

Por ejemplo: cuando agrega un nuevo recurso "Resource1", utilizando el asistente, se agregará un nuevo grupo de elementos al archivo del proyecto:

<ItemGroup> <EmbeddedResource Include="Resource1.resx"> <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resource1.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup>

Tal vez haya bibliotecas para modificar programáticamente los archivos del proyecto, pero no que yo sepa.

Lo que haría sería intentar serializar y deserializar el archivo del proyecto usted mismo y agregarle esa sección para cada recurso que genere.

EDITAR:

También agregará un Grupo de artículos diferente:

<ItemGroup> <Compile Include="Resource1.Designer.cs"> <AutoGen>True</AutoGen> <DependentUpon>Resource1.resx</DependentUpon> <DesignTime>True</DesignTime> </Compile> </ItemGroup>

Entonces, a menos que tenga un buen programa de terceros para serializar, editar, deserializar el archivo del proyecto. Probablemente sea mejor dejar que el asistente lo haga.