¿Que es mejor usar? un archivo .resources o un .xml en programa internacional

31/10/2006 - 17:45 por edcha | Informe spam
Muchas gracias por la ayuda que hasta el momento me han brindado, ahora
necesito consejo y ayuda en lo siguiente.

El programa que estoy creando tiene como objetivo ser usado en
diferentes países lo que implica que tengo que traducir todos los
mensajes y texto de botones etc. pero lo que haré es que solo lo
traduciré a un idioma el base que es español y la traducción al
ingles y dejare un formulario para que la persona traduzca todos los
textos al idioma en que lo esta usando y se creara un nuevo archivo
.xml en una carpeta con el idioma traducido y se usara éste al iniciar
el programa, así no me meto con la traducción a todos los idiomas.

hasta el momento lo tengo así.

1º) Al iniciar se establece los formatos para fecha y moneda etc. con
el idioma que se ha escogido en las propiedades y que se guarda en un
archivo .xml que funciona como si fuera el registro de windows (no
quiero usar el Registro de windows) de esa forma los formatos se
cambiaran al pais seleccionado lo tengo asi:
Thread.CurrentThread.CurrentCulture = new
CultureInfo("es-CR"); //"es-CR" lo toma del RegFile.xml
Thread.CurrentThread.CurrentUICulture = new
CultureInfo("es-CR"); //"es-CR" lo toma del RegFile.xml
en este archivo de registro no tengo problema por ser propiedades del
programa que no nesecitan ser traducidos

2º) La traducción de cada texto y mensaje lo tengo en el archivo
en_US.xml y se creara el nuevo archivo .xml después de traducir cada
texto la persona, y aquí viene el problema, el asunto es que los
archivos .xml necesitan que se les declare <?xml version="1.0"
encoding="ISO-8859-1"?> y la persona tendría que saber que tipo de
"encoding=" necesitara para el idioma que usa, lo cual ya complica el
uso del programa ya que si escoge uno incorrecto ciertos caracteres no
los escribe bien ni los lee bien con el XmlDocument que estoy usando en
una clase con el nombre XMLClass.cs

3º) La segunda opcion que veo es usar un archivo de recurso que seria
algo asi "en_US.resources", pero esto no lo conozco bien lo de archivos
de recursos y es aquí donde necesito la ayuda ya que he leído varias
ayudas y sigo sin entender. parece que se puede crear un archivo de
recurso antes de compilar y después agregarlo ya sea como un parte del
compilado o un dll externo, para buscar los datos se usa
ResourceManager según parece, pero esto no me sirve por que el archivo
lo generara el programa después que la persona lo traduce por eso uso
un archivo xml.

4º) Con el siguiente código puedo después de crear un archivo de
recurso independiente leer los datos que se encuentran en él, pero
como notaran solo recorre todo y lo que necesito es algo así como
(búsqueme en el en.Key "Texto1" y devuélvame el valor que corresponde
que seria "valor 1" )


//Crear Archivo de recursos
// using System.Resources;
FileStream fs = new FileStream("en_US.resources" ,
FileMode.OpenOrCreate, FileAccess.Write);
IResourceWriter writer = new ResourceWriter(fs);
writer.AddResource("Texto1", "valor 1");
writer.AddResource("Texto2", "valor 2");
writer.Generate();
writer.Close();

//Lee archivo de recursos
IResourceReader reader = new ResourceReader("items.resources");
IDictionaryEnumerator en = reader.GetEnumerator();
// Goes through the enumerator, printing out the key and value
pairs.
while (en.MoveNext()) {
Debug.WriteLine(en.Key + "\t");
Debug.WriteLine(en.Value);
}
reader.Close();

Como podran ver estoy hecho un lio y nesecito ayuda y consejo sobre
como lograr lo que quiero hacer.

Muchas gracias de antemano.
 

Leer las respuestas

#1 Marino Posadas
03/11/2006 - 21:19 | Informe spam
Las dos son soluciones válidas. Si acaso, no es conveniente utilizar
ficheros XML cuya longitud exceda algo manejable cómodamente por tu
programa.

Por lo demás, habrás observado que puedes rellenar ficheros de recursos con
contenido utilizando el propio diseñador embebido en Visual Studio 2005. En
realidad, hay dos tipos: el fichero que se asocia a cada formulario Windows
(y se compila ligado a él) (ficheros .resx) y los ficheros .resources que tú
apuntas donde trabajas con una sintaxis parecida. (Solo tienenes que
solicitar añadir un recurso, y, al seleccionar el tipo te ofrecerá dos
opciones: Local y Global. La Global correspondería a esta última clase, y
para más señas el código puedes ver en la clase parcial generada cómo hace
el propio V.Studio para añadir los recursos mediante código).

Espero que te sirva.

Saludos cordiales
Marino Posadas
MCSD, MCAD, MCT
MVP Visual C#
www.ElAveFenix.net


"edcha" escribió en el mensaje de
noticias:
Muchas gracias por la ayuda que hasta el momento me han brindado, ahora
necesito consejo y ayuda en lo siguiente.

El programa que estoy creando tiene como objetivo ser usado en
diferentes países lo que implica que tengo que traducir todos los
mensajes y texto de botones etc. pero lo que haré es que solo lo
traduciré a un idioma el base que es español y la traducción al
ingles y dejare un formulario para que la persona traduzca todos los
textos al idioma en que lo esta usando y se creara un nuevo archivo
.xml en una carpeta con el idioma traducido y se usara éste al iniciar
el programa, así no me meto con la traducción a todos los idiomas.

hasta el momento lo tengo así.

1º) Al iniciar se establece los formatos para fecha y moneda etc. con
el idioma que se ha escogido en las propiedades y que se guarda en un
archivo .xml que funciona como si fuera el registro de windows (no
quiero usar el Registro de windows) de esa forma los formatos se
cambiaran al pais seleccionado lo tengo asi:
Thread.CurrentThread.CurrentCulture = new
CultureInfo("es-CR"); //"es-CR" lo toma del RegFile.xml
Thread.CurrentThread.CurrentUICulture = new
CultureInfo("es-CR"); //"es-CR" lo toma del RegFile.xml
en este archivo de registro no tengo problema por ser propiedades del
programa que no nesecitan ser traducidos

2º) La traducción de cada texto y mensaje lo tengo en el archivo
en_US.xml y se creara el nuevo archivo .xml después de traducir cada
texto la persona, y aquí viene el problema, el asunto es que los
archivos .xml necesitan que se les declare <?xml version="1.0"
encoding="ISO-8859-1"?> y la persona tendría que saber que tipo de
"encoding=" necesitara para el idioma que usa, lo cual ya complica el
uso del programa ya que si escoge uno incorrecto ciertos caracteres no
los escribe bien ni los lee bien con el XmlDocument que estoy usando en
una clase con el nombre XMLClass.cs

3º) La segunda opcion que veo es usar un archivo de recurso que seria
algo asi "en_US.resources", pero esto no lo conozco bien lo de archivos
de recursos y es aquí donde necesito la ayuda ya que he leído varias
ayudas y sigo sin entender. parece que se puede crear un archivo de
recurso antes de compilar y después agregarlo ya sea como un parte del
compilado o un dll externo, para buscar los datos se usa
ResourceManager según parece, pero esto no me sirve por que el archivo
lo generara el programa después que la persona lo traduce por eso uso
un archivo xml.

4º) Con el siguiente código puedo después de crear un archivo de
recurso independiente leer los datos que se encuentran en él, pero
como notaran solo recorre todo y lo que necesito es algo así como
(búsqueme en el en.Key "Texto1" y devuélvame el valor que corresponde
que seria "valor 1" )


//Crear Archivo de recursos
// using System.Resources;
FileStream fs = new FileStream("en_US.resources" ,
FileMode.OpenOrCreate, FileAccess.Write);
IResourceWriter writer = new ResourceWriter(fs);
writer.AddResource("Texto1", "valor 1");
writer.AddResource("Texto2", "valor 2");
writer.Generate();
writer.Close();

//Lee archivo de recursos
IResourceReader reader = new ResourceReader("items.resources");
IDictionaryEnumerator en = reader.GetEnumerator();
// Goes through the enumerator, printing out the key and value
pairs.
while (en.MoveNext()) {
Debug.WriteLine(en.Key + "\t");
Debug.WriteLine(en.Value);
}
reader.Close();

Como podran ver estoy hecho un lio y nesecito ayuda y consejo sobre
como lograr lo que quiero hacer.

Muchas gracias de antemano.

Preguntas similares