Localization for Windows Universal Apps
Hello All,
Sharing some notes for implementing localization in UWP apps for windows 10.
For localization in Windows 10, it is better to use .resx files.
Steps for implementing localization:
1)Create New Windows Universal App say "UWPLocalizationDemo"
2)In Solution Explorer,right click on project select Add->New Folder(say : Strings)
3)Right Click on Strings folder and add new folder as a child folder.
4)Rename new folder as "en-US".These are naming conventions specific to a language and country/region name,found on National Language Support (NLS).
5)Add new item (.resx resource file) inside en-US folder(as Resources.resw).
6)Now open MainPage.xaml file
7)Give name to parent grid as(x:Uid="ParentGrid") and add a TextBlock inside this grid(<TextBlock x:Uid = "MyTextBlock" Foreground = "White" />)
8)Its up to you, either use MultiLingual Kit for translations or if you have translations for all languages already so just add it into project(Strings/<LanguageFolder Name>/Resources.resw).
9)For using Multilingual Kit: Go to Tools-> Extensions and updates
10) Download and install multi lingual kit and restart Visual studio after that.
11)Now Enable toolkit for the project: Tools->Multilingual App Toolkit ->Enable selection
12)Now its time to add languages : Right click on project ->Multilingual App Toolkit -> Add translation Languages
13)Select languages for which you want your app to do localization(say Spanish),click Ok.
14)Now you will see a folder "es" inside Strings folder and Resources.resw file inside "es" folder
15)Also you can see a new folder added into your project "MultilingualResources" inside it all supportive languages .xlf resides.You can open it using Multilingual editor, and do translation of strings in editor for every language.On rebuilding the app, these changes may reflect to your Resources.resw files inside the respective language folders.
Now Its time to check our localization:
1)Go to language and region settings.
2)Download respective language packs if not there,set language as primary language and keep.
3)Sign out and sign in to reflect language change.Or restart device if not works.
4)Run the app, and find the localization changes there :)
or::
For just to debug add this line in App.xaml.cs class under launching method or in App()
** Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "fr"; //Change your language code if needed**
It will override the existing device language.
There also some ways to get string via code
var context = new ResourceContext();
context.Languages = new string[] { Windows.System.UserProfile.GlobalizationPreferences.Languages[0].ToString() };
ResourceMap resourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");
GenerateToast(resourceMap.Uri.AbsoluteUri.ToString());
String str = resourceMap.GetValue("MyTitle", context).ValueAsString;
and
public static string Get(string key)
{
var getterString = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView().GetString(key);
return getterString;
}
Or you also write language converter
public class LocalizedStrings : IValueConverter
{
private static readonly Windows.ApplicationModel.Resources.ResourceLoader LocalizedResourceLoader = new Windows.ApplicationModel.Resources.ResourceLoader();
public static string Get(string key)
{
return LocalizedResourceLoader.GetString(key);
}
public object Convert(object value, Type targetType, object parameter, string language)
{
if (parameter == null)
{
return string.Empty;
}
if (parameter is string)
{
return LocalizedResourceLoader.GetString((string)parameter);
}
else
{
return string.Empty;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.String language)
{
throw new NotImplementedException();
}
}
And call it from xaml:
<TextBlock Text="{Binding Converter={StaticResource LangConverter}, ConverterParameter=HeaderText}" />
Where HeaderText is a Key inside resources.resw file.