No busques más por todo internet porque estás al espacio necesario, contamos con la solución que buscas y sin problema.
Solución:
Sigue estos pasos:
1) Colocar todo String
fragmentos en un archivo de recursos separado.
Ejemplo: StringResources.xaml
:
All Vehicles
2) Haga copias para cada idioma y agréguelas (traducidas) a los diccionarios combinados. No olvide agregar el código ISO del país para facilitar las cosas.
Ejemplo App.xaml
:
El último archivo de recursos con cadenas se utilizará para reemplazar partes de texto en el código.
3a) Utilice las partes de texto del String
mesa:
Ejemplo Window1.xaml
:
3b) Cargue el recurso desde el código (solo use este código si no desea configurarlo a través de XAML
):
void PageLoad()
string str = FindResource("All_Vehicles").ToString();
4) Cambiar a una nueva cultura al inicio de la aplicación:
Codesnippet de App.xaml.cs
:
public static void SelectCulture(string culture)
if (String.IsNullOrEmpty(culture))
return;
//Copy all MergedDictionarys into a auxiliar list.
var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();
//Search for the specified culture.
string requestedCulture = string.Format("StringResources.0.xaml", culture);
var resourceDictionary = dictionaryList.
FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
if (resourceDictionary == null)
//If not found, select our default language.
requestedCulture = "StringResources.xaml";
resourceDictionary = dictionaryList.
FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
//If we have the requested resource, remove it from the list and place at the end.
//Then this language will be our string table to use.
if (resourceDictionary != null)
Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
//Inform the threads of the new culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
Estoy usando la extensión de localización de WPF. Es una forma realmente sencilla de localizar cualquier tipo de DependencyProperty
sobre DependencyObject
s.
- está en un estado estable real
- admite un estilo de escritura tipo encuadernación como
Text = LocText ResAssembly:ResFile:ResKey
- funciona con el mecanismo .resx-fallback (por ejemplo, en-us -> en -> cultura independiente)
- apoya el forzamiento cultural (por ejemplo, “esto tiene que ser en inglés todo el tiempo”)
- funciona con propiedades de dependencia normales
- funciona con plantillas de control
- se puede usar en XAML (en realidad: P) sin espacios de nombres adicionales
- se puede utilizar en el código subyacente para vincular valores localizados a controles dinámicos generados
- implementos
INotifyPropertyChanged
para uso avanzado - apoyos string formato, por ejemplo
"this is the '0' value"
- apoyos prefix y valores de sufijo (actualmente con
LocText
extensión) - está en uso en sistemas productivos (como mi producto de relaciones públicas)
- El cambio del idioma a runtime afecta NO porción de tiempo
- se puede utilizar con cualquier archivo de recursos (
.resx
) en todos los ensamblajes (también el dinámico cargado en tiempo de ejecución) - no necesita ningún proceso de inicialización (como “llamar a xyz para registrar un diccionario de localización especial”)
- está disponible en tiempo de diseño (MS Expression Blend, MS Visual Studio 2008 (Normal y SP1)
- el cambio del idioma elegido es posible en tiempo de diseño
- puede localizar cualquier tipo de datos, siempre que un convertidor (
TypeConverter
) porque existe (se extiendeLocalizeExtension
) - ha incorporado soporte para
Text
, superiorText
, más bajoText
,Image
s,Brush
es,Double
yThickness
- no afecta a las pérdidas de memoria
- deja el
UID
propiedad intacta - ofrece una
SpecificCulture
para usar comoIFormatProvider
(p.ej(123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20"
o"123,20"
) - ofrece alguna funcionalidad para verificar y obtener valores de recursos en el código subyacente
- no altera la cultura en
Thread.CurrentCulture
oThread.CurrentUICulture
(puede cambiarse facilmente)
Si entiendes que ha sido de provecho nuestro artículo, agradeceríamos que lo compartas con el resto juniors de este modo contrubuyes a difundir nuestro contenido.