+2  A: 

You could set the current culture to English only in debug builds :

#if DEBUG
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
#endif
Thomas Levesque
Wouldn't that make debugging unreliable? Other parts of the project might depend on the France culture.
Kobi
@Thomas: yes, but this change will affect all other code users. If my project manager is a old french man he will decapitate me for that :)
serhio
@Kobi : most culture-specific behavior like date/time/number formatting depend on the CurrentCulture, not the CurrentUICulture. CurrentUICulture only affects which resources are used. If there are no satellite assemblies for resources in cultures other than French, it will fall back to the default culture anyway
Thomas Levesque
@serhio: He probably would not decapitate you if you make the UI culture a config setting and configure it only in your personal build to be "en-US".
0xA3
@divo: yeah, maybe, but I am sure he will not accept as well changes in the actual project only because I want my exceptions in English.
serhio
A: 

I didn't try, but according to the documentation that property should be set by default to the current UI language, that is set in the control panel. So it should work correctly automagically according to your international settings.

Matteo Italia
what exactly do you mean my "current UI language"? My OS is French one(by e.g. the "Start" button name is "Démarrer"), so by default `CultureInfo.CurrentCulture.Name == "fr-FR"`
serhio
In ControlPanel I changed the "Regional and language options" => "Standards and formats" to be "English US", but this didn't help.
serhio
I'm talking about the one set in the International settings in the Control Panel (http://www.guidebookgallery.org/pics/gui/settings/international/winxppro-1-1.png). EDIT I saw now your comment... I don't know, AFAIK it should work like that...
Matteo Italia
@Matteo: you are partially right. I changed the "Standards and formats", and this really changed the **CurrentCulture**, but NOT changed the Thread's **CurrentUICulture** : *CurrentCulture* changed in **en-US**, but *Thread.CurrentThread.CurrentUICulture* remained **fr-FR**.
serhio
I think you can only change UICulture in Regional Settings if you have an MUI version of Windows. I think the setting is Regional and Language Options / Languages / Language used in menus and dialogs (on XP).
Joe
You're right: although the regional settings always had effect on the language of the resources retrieved by the unmanaged APIs, the CurrentUICulture is said on the docs to be initialized by default to the value provided by GetUserDefaultUILanguage, whose doc says that "If MUI is not installed on the operating system, the function retrieves the default computer user interface language." Anyhow, now that we know how it works, you could just set CurrentUICulture to the CultureInfo of CurrentCulture. --- EDIT --- I saw just know that you figured it out by yourself. :P
Matteo Italia
@Matteo: yes, but you know, this didn't help me much as I can't(don't want) change the solution code for that, because this will affect not only me.
serhio
Making the descriptions of the exceptions match the preferred language of the user for me it's a bonus also for the end users.
Matteo Italia
FWIW, on Windows 7 (English) if you install optional language packs then you can change the "display language" on a per-user basis (essentially, MUI is built-in). This is probably the easiest way to handle this short of just adding an option to the program.
Shog9
I didn't try Windows 7, but as far as I remember the .NET Framework is localized separately from Windows, and the various language packs are freely installable on every machine, so setting the CurrentUICulture to the desidered one should work on every machine that has the needed language pack (usually on every machine there's the "normal" Framework in English plus the local language pack).
Matteo Italia
A: 

Finally a "sharp" solution could be the following:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

#if DEBUG
    // Add this; Change the Locales(En-US): Done.
    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
#endif

    Application.Run(new Form1());
}

However I'd like a solution without modifications in the project code.

From MSDN:

The CurrentUICulture property will be set implicitly if an application does specify a CurrentUICulture. If CurrentUICulture is not set explicitly in an application's code, it is set by the GetUserDefaultUILanguage function on Windows 2000 and Windows XP Multilingual User Interface (MUI) products where the end user can set the default language. If the user's UI language is not set, it will be set by the system-installed language, which is the language of the operating system's resources.

If an application is Web-based, the CurrentUICulture can be set explicitly in application code to the user's browser accept language.

serhio
+1  A: 

What about installing an English OS the next time you reinstall your computer? This has the additional advantage that you software is tested on a non-French OS, making sure you don't accidentally hard-code OS-language-specific stuff in your software (e.g. "C:\Programmes", "PCNAME\Administrateurs", ...).

Heinzi
:D I'd like to work on a English OS computer. But. I don't reinstall very frequently my OS, thanks to God. And, after that, I'd better hardcode(unintentionally) "Administrateurs" than "Administrators" etc. because the french programs targets mainly the French OS computers :)
serhio
Good point. We're having the same issue here (German-language OS), and *only me* switching to an English OS has worked quite fine. Thus, the software is tested on a German OS (on my co-worker's machines) as well as on an English OS.
Heinzi