After localizing your application for multiple languages, you have a main executable and a satellite assembly for each language that you’ve localized for.

If you then make changes to content in your application that is represented as XAML, the changes will show up in the satellite assembly for the neutral language, but not in the other satellite assemblies. The changes will only be present when running under the neutral language.

After changing XAML content in a localized application, you need to take the following steps:

Once you integrate localized content back into your application, you’ll want to verify that the new content looks correct. You could verify the content by running your application on a system having the target culture (e.g. French). You can also just override the local culture information at run-time, setting it to the target culture for testing purposes.

To override the culture at run-time, you set the CurrentUICulture property of the current thread. Below, we change the current UI culture at app startup so that we can test localization for the fr-FR (French/France) culture. We also override metadata for the Language property to force user interface controls to pick up the current culture (rather than UI culture).

When you set the UICulture tag in your project, signifying that you want to store resources in a satellite assembly, you also need to set the NeutralResourcesLanguage attribute to indicate the default language to be used when trying to load resources to match the current culture.

Below is a fragment from AssemblyInfo.cs, showing use of the NeutralResourcesLanguage attribute, as well as the comments provided by the New Project wizard.

//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

At run-time, the current user interface culture (CurrentUICulture property) is read to determine the desired culture to use when loading resources. This is typically the language used by the version of Windows that is installed. (Rather than the current regional setting).

If there is a sub-directory whose name matches CurrentUICulture, then the corresponding satellite assembly is loaded. If none is found, a neutral language assembly is used.

After you’ve created .csv files containing the English-based property values, including text, the next step is to have the content actually localized. This most often consists of translating the English text into another language.

The steps taken for actual localization of content are typically something like: