【问题标题】:Best Approach for Localisation variables本地化变量的最佳方法
【发布时间】:2014-01-22 07:07:41
【问题描述】:

我阅读了更多与本地化最佳实践相关的文章。从它们我们可以确定始终 UTCtime 最适合处理日期时间。像这样我们有一些指导,比如字符串的连接,ui等。

但我还发现一篇文章说我们需要处理字符串/整数转换。我没有正确理解。以下是解释

“请确保在调用 ToString() 时始终传递 CultureInfo,除非它不受支持。这样您就可以评论您的意图。例如:如果您在内部使用某个数字并且由于某种原因需要将其转换为字符串使用:

int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);

对于将要显示给用户使用的数字:

var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used

这同样适用于 Parse()、TryParse() 甚至 ParseExact() - 如果没有正确使用 CultureInfo,可能会引入一些讨厌的错误。那是因为微软中的一些可怜的灵魂,充满了善意,决定将 CultureInfo.CurrentCulture 视为默认值是一个好主意(如果你不传递任何东西,它将被使用) - 毕竟当有人使用 ToString( ) 他/她想向用户显示它,对吗?结果并非总是如此 - 例如尝试将您的应用程序版本号存储在数据库中,然后将其转换为 Version 类的实例。祝你好运。 "

但为什么需要这样做。那么在所有数据类型中,我们需要像这样转换/做吗?这样做有什么好处,因为我得到了与不添加文化信息相同的结果。

【问题讨论】:

    标签: c# asp.net localization


    【解决方案1】:

    如果你这样做

    double i = 42.42;
    var s = i.ToString();
    

    并在您的English PC(美国或英国地区)上运行它,然后s 将是

    42.42
    

    现在在GermanRussian PC 上运行它,突然s 变成了

    42,42
    

    这种不同的小数点可能会导致许多地方出现无数错误(当您保存/加载数据时,当您显示值和读取用户输入时等)。

    如果您的软件将在不同的语言环境中运行,一个可能的最终解决方案是在您 operate 处理数据时始终使用 ColtureInfo.InvariantCulture,并且仅在需要用户干预时使用 CultureInfo.CurrentCulture

    int 值的问题可能是千位分隔符(可能缺少空格、逗号、点等)。

    我自己创建扩展方法,例如:

        public static string F(this string @this, params object[] args)
        {
            return string.Format(CultureInfo.InvariantCulture, @this, args);
        }
    

    所以我只是写

    "{0} {1:0.#}".F(Msg.Localization.User.Prompt, i);
    

    其中Msg 是本地化消息类。

    【讨论】:

    • 太棒了。同样,本地化需要哪些特殊考虑?
    • This 可能是最基本的本地化。但我自己更喜欢反射来即时翻译 UI。为了简化消息传递(显示本地化消息或控件的动态文本),反射也是最好的,只需创建一个类,在 default (通常是英语)语言。更改语言时,使用 translation 填充该类(从我讨厌的附属程序集或特殊语言文件加载,其中包含易于编辑的本地化)。
    • 是的,我使用了单独的类库项目并使用反射调用卫星程序集。基于文件的资源管理器。在这里,我们讨论了特定于文化的过程,例如数据时间处理、变量等。还有其他需要考虑的过程吗?
    • 考虑翻译过程本身,有很多方法。我发现最好的方法是通过语言文件(文本文件)更新翻译。如果您在切换语言时加载它,那么您可以非常快速地检查翻译或更新它并立即查看结果。如果您使用的是卫星,那么抱歉 =D
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2020-03-02
    • 2018-06-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多