将所有内容存储在GMT中?
使用嵌入式偏移量按照输入的方式存储所有内容?
每次渲染时都要数学吗?
显示相对时间"1分钟前"?
我正在使用NerdDinner应用程序试图自学ASP.NET MVC.但是,我偶然发现全球化问题,我的服务器使用逗号作为小数分隔符显示浮点数,但虚拟地球地图需要点数,这会导致一些问题.
我已经在我的视图中解决了映射JavaScript的问题,但是如果我现在尝试发布带有点作为十进制分隔符的已编辑的晚餐条目,则控制器InvalidOperationException在更新模型时失败(抛出)(在UpdateModel()metod中).我觉得我必须在控制器的某个地方设置适当的文化,我尝试了OnActionExecuting()但是没有帮助.
我正在研究Android应用程序的全球化.我必须提供从应用程序中选择不同区域设置的选项.我在我的活动(HomeActivity)中使用以下代码,其中我提供了更改语言环境的选项
Configuration config = new Configuration();
config.locale = selectedLocale; // set accordingly
// eg. if Hindi then selectedLocale = new Locale("hi");
Locale.setDefault(selectedLocale); // has no effect
Resources res = getApplicationContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
只要没有像屏幕旋转那样的配置更改,其中locale默认为android系统级别语言环境而不是代码设置的语言环境,这样就可以正常工作.
Locale.setDefault(selectedLocale);
Run Code Online (Sandbox Code Playgroud)
我能想到的一个解决方案是使用SharedPreferences持久保存用户选择的语言环境,并且在每个活动的onCreate()方法中将语言环境设置为持久语言环境,因为onCreate()会在每次配置更改时反复调用.有没有更好的方法来做到这一点,所以我不必在每个活动中都这样做.
基本上我想要的是 - 一旦我在我的HomeActivity中更改/设置为某个区域设置,我希望我的应用程序中的所有活动都使用该区域设置本身而不管任何配置更改....除非并且直到将其更改为其他区域设置应用程序的HomeActivity提供更改区域设置的选项.
当我使用这段代码时:
var ri = new RegionInfo("us");
var nativeName = ri.NativeName; // ?? ??????? ????
Run Code Online (Sandbox Code Playgroud)
nativeName那么为什么是弦乐"?? ??????? ????"(在切罗基)?
如果我改为new RegionInfo("US")(只有差异,资本US),我会改为"United States".
我做知道的首选使用的RegionInfo是给特定的文化信息字符串,例如:
new RegionInfo("en-US")
new RegionInfo("chr-Cher-US")
Run Code Online (Sandbox Code Playgroud)
等等,这是有效的.但是,只有当我使用小写时,为什么切诺基比英语更喜欢us?
(见于Windows 10(版本1803"2018年4月更新"),.NET Framework 4.7.2.)
更新:即使在同一台机器上,这也不一致.例如,我尝试打开PowerShell很多次,每次粘贴[System.Globalization.RegionInfo]'US'它.好像很长一段时间,PowerShell的所有实例都始终给出相同的结果.但过了一会儿,PowerShell的实例会产生相反的结果.这是两个窗口的屏幕截图,一个窗口始终有一个窗口,另一个窗口NativeName始终具有相反的窗口.因此必须有一些非确定性的决定(套管无差异):
似乎没有好的方法来本地化WPF应用程序.MSDN似乎认为乱丢我的XAML x:Uid,生成CSV文件,然后生成新的程序集(使用他们的示例代码!)就是答案.更糟糕的是,此过程不涉及如何本地化图像,二进制blob(例如,PDF文件)或嵌入代码中的字符串.
那么,您如何本地化应用程序:
MessageBox.Show("Hello World");)指定CurrentCulture或InvariantCulture而不指定文化的最佳做法是什么?
例如,根据我的阅读,如果您正在进行序列化,则需要使用InvariantCulture作为指定数据值的规范表示的方法.这是基于文化的字符串操作的相对较小的百分比.
我发现它很长,很冗长,而且大部分时间都是丑陋的,每次我都说出来,比如说:
var greeting = string.Format(CultureInfo.CurrentCulture, "Hello ", userName);
Run Code Online (Sandbox Code Playgroud)
然而,我的团队最近开启了FxCop,现在总是在每个地方都使用CultureInfo.结合简洁性,可读性和功能性的最佳技术是什么?
一些好的阅读材料:
我应该在使用DateTime.Now或DateTime.UtcNow HttpCookie.Expires和HttpCachePolicy.SetExpires?
Cookies正在发送'GMT'时间,但我不知道如果我发送的DateTime.Now.AddDays(3)话会发生什么,如果我在GMT + 5.与Expires HTTP标头相同(第14.21节).
我该怎么用?
我想构建一个可以处理获取区域设置字符串以支持国际化的CMS.我计划将字符串存储在数据库中,然后在数据库和应用程序之间放置一个键/值缓存(如memcache),以防止性能下降,从而使每个页面的数据库都能进行翻译.
这比使用带有字符串数组的PHP文件更复杂 - 但是当你有2,000个翻译行时,这种方法效率非常低.
我想过使用gettext,但我不确定CMS的用户是否会习惯使用gettext文件.如果字符串存储在数据库中,那么可以设置一个不错的管理系统,允许它们随时进行更改,RAM中的缓存将确保获取这些字符串的速度比gettext快或快.考虑到甚至zend框架都没有使用它,我也觉得使用PHP扩展并不安全.
这种方法有什么问题吗?
我想也许我会增加更多的思考.字符串翻译的一个问题是它们不支持日期,金钱或条件语句.但是,感谢intl PHP现在有了MessageFormatter,无论如何都需要使用它.
// Load string from gettext file
$string = _("{0} resulted in {1,choice,0#no errors|1#single error|1<{1, number} errors}");
// Format using the current locale
msgfmt_format_message(setlocale(LC_ALL, 0), $string, array('Update', 3));
Run Code Online (Sandbox Code Playgroud)
另一方面,我不喜欢gettext的一个原因是文本被嵌入到整个应用程序中.这意味着负责主要翻译的团队(通常是英语)必须能够访问项目源代码,以便在默认语句的所有位置进行更改.它几乎与遍布SQL意大利面条代码的应用程序一样糟糕.
因此,使用这样的键是有意义的_('error.404_not_found'),然后允许内容编写者和翻译者只是担心PO/MO文件而不会弄乱代码.
但是,如果给定键不存在 gettext转换,则无法回退到默认值(就像使用自定义处理程序一样).这意味着您要么在代码中使用写入器 - 或者向没有语言环境转换的用户显示"error.404_not_found"!
另外,我不知道任何使用PHP的gettext的大型项目.我很感激任何链接到使用良好(因此经过测试)的系统,这些系统实际上依赖于本机PHP gettext扩展.
使用ASP.NET MVC剃刀,我有一个资源文件App_GlobalResources命名General.resx,并General.fr.resx用"你好"和"你好"和"你好"和"卓悦"的名称值配对.
我如何从我的观点中引用这些内容?
这些不起作用:
@Html.Resource("General.Hello")
@Html.Resource("GlobalResources.Hello")
@Html.Resource("GlobalResources.General.Hello")
@Html.Resource("GlobalResources, General.Hello")
Run Code Online (Sandbox Code Playgroud) 本地化日期格式描述符的最佳方法是什么?
任何来自不使用mm/dd/yyyy格式的文化的人都知道,必须以这种格式输入日期是很烦人的..NET框架提供了一些非常好的本地化支持,因此根据用户文化解析日期是微不足道的,但是您通常还希望显示有关所需格式的有用提示(尤其是区分yy和yyyy,它们可以互换)大多数文化).
以对大多数用户有意义的方式执行此操作的最佳方式是什么(例如,由于案例的变化以及一到两个字母之间的切换,dd/M/yyy会让人感到困惑).
globalization ×10
localization ×4
.net ×3
asp.net-mvc ×2
c# ×2
android ×1
asp.net ×1
casing ×1
culture ×1
cultureinfo ×1
date ×1
gmt ×1
icu ×1
java ×1
locale ×1
php ×1
razor ×1
regioninfo ×1
timezone ×1
wpf ×1
xaml ×1