73 lines
2.8 KiB
C#
73 lines
2.8 KiB
C#
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Globalization;
|
|
using System.Threading;
|
|
|
|
namespace Microsoft.TestCommon
|
|
{
|
|
public class CultureReplacer : IDisposable
|
|
{
|
|
private const string _defaultCultureName = "en-GB";
|
|
private const string _defaultUICultureName = "en-US";
|
|
private static readonly CultureInfo _defaultCulture = CultureInfo.GetCultureInfo(_defaultCultureName);
|
|
private readonly CultureInfo _originalCulture;
|
|
private readonly CultureInfo _originalUICulture;
|
|
private readonly long _threadId;
|
|
|
|
// Culture => Formatting of dates/times/money/etc, defaults to en-GB because en-US is the same as InvariantCulture
|
|
// We want to be able to find issues where the InvariantCulture is used, but a specific culture should be.
|
|
//
|
|
// UICulture => Language
|
|
public CultureReplacer(string culture = _defaultCultureName, string uiCulture = _defaultUICultureName)
|
|
{
|
|
_originalCulture = Thread.CurrentThread.CurrentCulture;
|
|
_originalUICulture = Thread.CurrentThread.CurrentUICulture;
|
|
_threadId = Thread.CurrentThread.ManagedThreadId;
|
|
|
|
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
|
|
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(uiCulture);
|
|
}
|
|
|
|
/// <summary>
|
|
/// The name of the culture that is used as the default value for Thread.CurrentCulture when CultureReplacer is used.
|
|
/// </summary>
|
|
public static string DefaultCultureName
|
|
{
|
|
get { return _defaultCultureName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The name of the culture that is used as the default value for Thread.UICurrentCulture when CultureReplacer is used.
|
|
/// </summary>
|
|
public static string DefaultUICultureName
|
|
{
|
|
get { return _defaultUICultureName; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The culture that is used as the default value for Thread.CurrentCulture when CultureReplacer is used.
|
|
/// </summary>
|
|
public static CultureInfo DefaultCulture
|
|
{
|
|
get { return _defaultCulture; }
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
private void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
Assert.True(Thread.CurrentThread.ManagedThreadId == _threadId, "The current thread is not the same as the thread invoking the constructor. This should never happen.");
|
|
Thread.CurrentThread.CurrentCulture = _originalCulture;
|
|
Thread.CurrentThread.CurrentUICulture = _originalUICulture;
|
|
}
|
|
}
|
|
}
|
|
}
|