winform语言本地化样本

时间:2012-10-12 16:17:04

标签: winforms localization

我有以下代码来转换静态模式下的控件,即通过编写翻译后的字符串(法语,德语等)并保存资源文件并将其调回。然而,如果我需要动态翻译(包括用户输入),比如谷歌翻译如何工作。我需要在离线模式下实现相同的功能。有没有可能访问谷歌像翻译,它可以立即/动态转换为所选语言,但是离线?或者请建议我任何首选方法。

foreach (Control c in this.Controls)
    {
        ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm));
        resources.ApplyResources(c, c.Name, new CultureInfo(lang));
    }

- 问候, 马诺哈尔。

1 个答案:

答案 0 :(得分:0)

我不知道它是否对你有所帮助,但这就是我所做的。它是用托管c ++ / clr编写的,你可以轻松地将它转换为c#。 我写了一个小助手来管理翻译过程

(您可以在运行期间使用此更改语言!它将立即翻译整个表单。)

ref class LanguageSwitcher
{
public:
   /// <summary>
   /// Change language at runtime in the specified form
   /// </summary>
   [System::Runtime::CompilerServices::Extension]
   static void SetLanguage( Form ^form, CultureInfo ^lang )
   {
      //Set the language in the application
      System::Threading::Thread::CurrentThread->CurrentUICulture = lang;

      ComponentResourceManager ^resources = gcnew ComponentResourceManager( form->GetType() );

      ApplyResourceToControl( resources, form->MainMenuStrip, lang );
      ApplyResourceToControl( resources, form, lang );

      form->Text = resources->GetString( "$this.Text", lang );
   }
private:
   static void ApplyResourceToControl( ComponentResourceManager ^resources, Control ^control, CultureInfo ^lang )
   {
      for each( Control ^c in control->Controls )
      {
         ApplyResourceToControl( resources, c, lang );
         String ^text = resources->GetString( c->Name + ".Text", lang );
         if( text != nullptr )
            c->Text = text;
      }
   }

   static void ApplyResourceToControl( ComponentResourceManager ^resources, MenuStrip ^menu, CultureInfo ^lang )
   {
      if(menu != nullptr)
         for each( ToolStripItem ^m in menu->Items )
         {
            String ^text = resources->GetString( m->Name + ".Text", lang );
            if( text != nullptr )
               m->Text = text;
         }
    }
};

这是如何使用的:

System::Globalization::CultureInfo^ lang = cli::safe_cast<System::Globalization::CultureInfo^ >(langCombo->SelectedItem);
LanguageSwitcher::SetLanguage(this,lang);

希望这有帮助!