-EDIT 2-找出它,檢查我的答案。我應該停止問StackOverflow上的問題,我總是搞清楚一兩分鐘後:)C#本地化不起作用
我有以下代碼(當然,大致與檢測,一切都在頂部):
Manager = new ResourceManager("EM250.Localization.Application",
Assembly.GetExecutingAssembly());
// CurrentCulture being fr-CA in this case
return Manager.GetString(Key, CurrentCulture);
所以,我使用我製作的自定義課程管理我的本地化資源。
我得到了兩個文件,一個叫做「Application.resx」,另一個叫做「Application.fr-CA.resx」。兩者都設置爲「嵌入式資源」。當我編譯我的代碼時,我得到一個名爲「fr-CA」的文件夾,其中包含文件「Library.resources.dll」。這是完全好的。
任何人都有一個想法,爲什麼我的代碼不工作?我到處都是英文字符串。
請注意,這不是一個ASP.NET項目,而是一個實際的WinForms項目。
CNC中或許應該張貼的代碼的其餘部分,這是我的應用程序的初始化:
String LocaleLoad;
if(Configuration.GetString("Language") == null)
{
// Detect which if the computer is set in french.
switch(System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName)
{
case "fr":
LocaleLoad = "fr-CA";
break;
default:
LocaleLoad = "en-CA";
break;
}
}
else
{
LocaleLoad = Configuration.GetString("Language");
}
// Initialize the localization class.
Localization.Initialize(LocaleLoad);
這是我的本地化類:
/// <summary>
/// Initialize the culture info with the specific culture.
/// </summary>
/// <param name="Culture">The culture to load.</param>
public static void Initialize(string Culture)
{
CultureInfo NewCulture = new CultureInfo(Culture);
if(!(Localization.CurrentCulture == null || CurrentCulture.TwoLetterISOLanguageName == NewCulture.TwoLetterISOLanguageName))
{
CurrentCulture = NewCulture;
Thread.CurrentThread.CurrentCulture = NewCulture;
Thread.CurrentThread.CurrentUICulture = NewCulture;
OnCultureChanged();
}
Thread.CurrentThread.CurrentCulture = NewCulture;
Thread.CurrentThread.CurrentUICulture = NewCulture;
CurrentCulture = NewCulture;
foreach(Language Lang in ListLanguages)
{
if(Lang.DisplayName == CurrentCulture.NativeName)
{
CurrentLanguageValue = Lang;
}
}
Manager = new ResourceManager("EM250.Localization.Application", Assembly.GetExecutingAssembly());
}
/// <summary>
/// Get a single entry from the ressource file.
/// </summary>
/// <param name="Key">The value to get from the ressource file.</param>
public static string GetString(string Key)
{
return Manager.GetString(Key, CurrentCulture);
}
你在執行哪種文化? – Oded
en-CA,也試圖獲得fr-CA。我有一段代碼檢測區域設置並相應地將其設置爲en-CA或fr-CA。這部分效果很好,因爲我的CurrentCulture根據我的區域設置而變化。我的應用程序選項中有一個覆蓋,這也適用。 – jValdron
那麼,如果文化是'en-CA',那麼你應該得到英語。 – Oded