c# - 运行单元测试时如何获得正确的字符串本地化?

标签 c# testing localization resource-file

我有一个项目需要支持法语和英语。我将所有字符串放入资源文件中。当我在 Visual Studio 中调试程序时,我可以成功地以法语查看程序。但是,当我运行该程序的测试时,该程序恢复为英语。我将法语资源 dll 文件添加到部署中。这允许我用法语调试单个单元测试,但是当我单击测试 -> 调试 -> 解决方案中的所有测试时,程序以英语运行。

我也尝试将 [DeploymentItem(@"..\bin\x86\Release\fr", "fr-FR")] 添加到其中一个测试中,但这没有帮助。有人对如何解决此问题有任何建议吗?谢谢!

最佳答案

我将语言测试包装在这样的 using 语句中:

[Test]
public void Loads_correct_labels_from_language()
{
    using(new LanguageSwitchContext("fr"))
    {
       var okayString = MyResources.Okay_Button;
       Assert.Equals("your localized string here", okayString);
    }
}

public class LanguageSwitchContext : IDisposable
{
    public CultureInfo PreviousLanguage { get; private set; }

    public LanguageSwitchContext(CultureInfo culture) 
    {
        PreviousLanguage = System.Threading.Thread.CurrentThread.CurrentCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
    }

    public LanguageSwitchContext(string language) 
    {
        //create culture from language
    }

    public void Dispose() 
    {
        System.Threading.CurrentThread.CurrentCulture = PreviousCulture;
    }
}

关于c# - 运行单元测试时如何获得正确的字符串本地化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403542/

相关文章:

c# - 这种一劳永逸的方法是否正确?

c# - 如何在代码隐藏中使用 wpflocalizeextension?

java - 使用 Dagger 和 AWS Lambda 进行单元测试

typescript - Testcafe Docker - 错误 : TypeScript compilation failed. 找不到名称 'require'

android - Google Play 优化功能建议将英语(美国)翻译成英语(英国)

android - 在多个国家/地区使用 Android 应用程序的一种翻译

c# - 在捕获的异常中 -> e.Data.Clear();//这应该做什么?

c# - 数据未插入到 Access 数据库中

c# - 用于 ASP.Net 应用程序的简单 Javascript 图像编辑器

android - 在 Android 上测试代码覆盖率有哪些替代方案?