0

コントロールを静的モードに変換する次のコードがあります。つまり、翻訳された文字列 (フランス語、ドイツ語など) を記述し、リソース ファイルを保存してコールバックします。ただし、動的に(ユーザー入力を含めて)翻訳する必要がある場合は、Google翻訳者の仕組みのように言ってください。オフラインモードでも同じものを実装する必要があります。オフラインで選択した言語に即座に/動的に翻訳する Google のような翻訳者にアクセスする可能性はありますか? またはおすすめの方法を教えてください。

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

-- よろしく、マノハール。

4

1 に答える 1

0

それがあなたに役立つかどうかはわかりませんが、これが私がしたことです。マネージC++/ clrで記述されているため、c#に簡単に変換できます。私は翻訳プロセスを管理するために少しヘルパーcalsを書きました

(これで実行時に言語を変更できます!フォーム全体が即座に翻訳されます。)

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);

お役に立てれば!

于 2012-10-24T13:13:53.340 に答える