2

我正在開發Visual Studio 2013(C#),並且正在尋找一種方法來使窗體語言的選擇更容易進行本地化。Visual Studio設計器 - 限制屬性網格以顯示語言屬性的某些特定語言

在您必須選擇要「設計‘下的語言的可能性設計師→’語言」和Visual Studio通過創建必要的本地化文件,如果你需要一個新的本地化形式沒有休息。

問題是:目前我只使用兩種不同的語言,並且每當我在這些本地化表單之間切換時,它會向我顯示所有可能語言的列表,其中一個錯誤的點擊可能會導致Visual Studio創建本地化版本這是一種我不想要的語言,這只是令人討厭的事情,並使用更多的文件混淆項目。

有誰知道一種方法來限制設計器選項中顯示的語言達到期望的數量和選擇?

回答

1

語言屬性是僅屬於設計時間的屬性,它不屬於Form類。這是一個使用擴展提供程序添加到表單設計時間的擴展屬性。它是CultureInfo的類型,並使用顯示所有可用文化的TypeConverter

作爲一種變通方法,你可以有一個包含BaseForm屬性像FormLanguageLanguage財產get,返回值和set,設置Language屬性的值。然後從這個BaseForm繼承你的所有表格。這樣,只需更改FormLanguage屬性即可。

還爲CultureInfo創建一個自定義類型轉換器,它只顯示您想要的文化,然後更改語言,這足以更改FormLanguage屬性。

Localization Language

這裏是我用作替代方法的代碼。不要忘記從這個BaseClass繼承你的表格。

using System; 
using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Globalization; 
using System.Linq; 
using System.Windows.Forms; 
public partial class BaseForm : Form 
{ 
    [TypeConverter(typeof(MyCultureInfoConverter))] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public CultureInfo FormLanguage 
    { 
     get 
     { 
      return TypeDescriptor.GetProperties(this)["Language"] 
       .GetValue(this) as CultureInfo; 
     } 
     set 
     { 
      TypeDescriptor.GetProperties(this)["Language"].SetValue(this, value); 
     } 
    } 
} 
public class MyCultureInfoConverter : CultureInfoConverter 
{ 
    public override StandardValuesCollection 
     GetStandardValues(ITypeDescriptorContext context) 
    { 
     var values = CultureInfo.GetCultures(CultureTypes.SpecificCultures | 
      CultureTypes.NeutralCultures) 
      .Where(x => x.Name == "fa-IR" || x.Name == "en-US").ToList(); 
     values.Insert(0, CultureInfo.InvariantCulture); 
     return new StandardValuesCollection(values); 
    } 
} 

當您選擇從FormLanguagefa-IR那麼Language自動成爲Persian的,因爲這是我們在FormLanguage二傳手寫的代碼。您可以在MyCultureInfoConverter中添加您需要的任何其他語言。

+0

當你從FormLanguage中選擇'fa-IR'時,由於我們在'FormLanguage'的setter中編寫的代碼,'Language'自動變成'Persian'。您可以在'MyCultureInfoConverter'中添加任何您需要的語言。如果您對答案有任何疑問,請告知我們。 –

+0

非常感謝。這是一個很好的解決方法來限制選擇。它似乎工作得很好。從一種語言切換到另一種語言效果良好,並且創建了正確的resx文件。我現在遇到的問題(但這可能是另一個問題)是,當我在設計器視圖中保存更改時,Visual Studio將不再反應,我將不得不殺死它。但是這可能是一個設置問題。我會在接下來的幾天觀察它。 –

+0

不客氣,我沒有面對這樣的問題。我會再檢查一次。但是你也可以在一個新的乾淨的項目中檢查行爲並讓我知道結果。 –