我将为Node.js(服务器端Javascript)实现这个,但这个问题是关于如何解决这个问题的一般方法.
有许多平台支持国际申请的翻译.
例如,Zend的翻译适配器的工作方式如下:
printf($translate->_("Today is the %1\$s") . "\n", date("d.m.Y"));
Run Code Online (Sandbox Code Playgroud)
Android的系统为每种语言使用strings.xml文件,并使用与Zend相同的概念.
这些适用于大多数西方语言.但是,许多非西方语言需要不同的单词顺序,或者甚至从右到左而不是从左到右的方向读取.
因此,在上述翻译调用中定义的指定顺序对于"外来"语言可能是无效的.
这让我想到了一个问题,如何设计适合任何语言的翻译系统/适配器?
我试图找出全球化和本地化之间的基本区别?但找不到一些正确的不同
我参考这个链接
http://msdn.microsoft.com/en-us/library/aa292205(v=vs.71).aspx
如果有人知道正确的不同请在此解释.
为什么他们在VS2010中提供两个不同的文件夹App_GlobalResources和App_LocalResources.
根据维基百科(并在Dario Solera的回答中证实),在意大利,他们使用冒号格式化时间:
24小时表示法以书写形式使用冒号作为分隔符.示例:14:05.会议记录以两位数字写成; 小时数可以写入或不带前导零.
但是,运行以下代码似乎输出点:
using System.Globalization;
Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT");
// Outputs "11.08"
Console.WriteLine(DateTime.Now.ToShortTimeString());
// Outputs "."
Console.WriteLine(new CultureInfo("it-IT").DateTimeFormat.TimeSeparator);
Run Code Online (Sandbox Code Playgroud)
这是一个框架错误吗?什么是"修复"它的最佳方法?TimeSeparator是可设置的 - 我们应该在分配之前覆盖它Thread.CurrentThread.CurrentCulture吗?
我在当前项目中做了一些全球化工作,我遇到了一个奇怪的行为.我在Windows 7上运行,只安装了英语 - 美国,我的应用程序在.NET 3.5上运行.
给出以下代码段:
var culture = new CultureInfo("zh-CN", true);
var formats = culture.GetAllDateTimePatterns('D');
Run Code Online (Sandbox Code Playgroud)
在.NET 4下,返回以下格式:
yyyy'?'M'?'d'?'
yyyy'?'M'?'d'?',dddd
dddd,yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
这是控制面板中的日期和时间格式对话框显示的内容(我的目标).
但是在.NET 3.5(及更早版本)中,返回以下内容:
yyyy'?'M'?'d'?'
yyyy-MM-dd
dddd, yyyy-MM-dd
dddd, yyyy'?'M'?'d'?'
Run Code Online (Sandbox Code Playgroud)
我去检查了使用EnumDateFormatsExEx(和早期版本)返回了什么值,它与.NET 4的结果相匹配.
差异不会打扰我; 我的问题是为什么结果不同?我认为底层实现是在呼唤EnumDateFormatsExEx或类似,但在我解雇了Ilspy后,我没有看到任何类似的东西.我想显示控制面板中显示的相同列表,所以当格式不同时我感到很惊讶.我认为格式列表将来自操作系统,并且在运行时版本之间没有区别.
在ASP.net MVC全球化方面,保留资源文件的最佳做法是什么?
例如,如果我们尝试保留域的资源文件,即order.resx,customer.resx等,我们有订单处理系统
或者我们可以尝试保持每个视图的资源文件,即OrderProcessingView.resx,CustomerView.resx等
常用字符串,如"添加","编辑","删除"可以使用common.resx文件处理.
或者还有其他方法来保存资源文件吗?
我们也在使用一些客户端渲染(Jquery模板,Kendo模板).
我想以英国格式返回日期,而不是当前存储的美国格式.
因此,我决定在我班级的值中添加一个getter和setter.
但是,当我使用getter和setter运行代码时,页面无法加载.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
// Globalisation for converting dates from American to British format
using System.Globalization;
/// <summary>
/// Class to hold the summary of an order take from database TOEHEAD
/// </summary>
public class OrderSummary
{
public string order_number { get; set; }
public string order_date
{
get
{
try
{
string ukDateTimeFormat = Convert.ToString(DateTime.Parse(this.order_date, CultureInfo.CreateSpecificCulture("en-US")));
return ukDateTimeFormat;
}
catch (FormatException e)
{
return "Error";
}
}
set
{
this.order_date = value; …Run Code Online (Sandbox Code Playgroud) 我已经在我的区域设置(捷克语,文化cs-CZ)中设置了以下短时间/长时间模式:

我正在尝试在C#应用程序中使用这些设置.在以下控制台应用中,一切正常:
使用系统; 使用System.Globalization;
class Program
{
static void Main()
{
Console.WriteLine(CultureInfo.CurrentCulture.Name);
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
正如我想的那样,输出如下:
cs-CZ
H.mm.ss
Run Code Online (Sandbox Code Playgroud)
我创建了ASP.NET应用程序,令我惊讶的是,它并没有反映出这一点.
最小的例子:
<%@ Page Language="C#" %>
<%= System.Globalization.CultureInfo.CurrentCulture.Name %><br />
<%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern %>
Run Code Online (Sandbox Code Playgroud)
输出:
cs-CZ
H:mm:ss
Run Code Online (Sandbox Code Playgroud)
我试过重启,.NET2.0,.NET4.0,仍然没有效果.
注意 - 这个问题是bug的一部分,我们忘记在DateTime.ToString()中包含InvariantCulture,然后由JSON反序列化器解析.(有这个问题的人有一些不同的时间格式分隔符).
解决重新创建CultureInfo的问题不是我正在寻找的问题,我只是想看看原因,因为我无法以任何方式重现问题.
百分比数据的格式化方式也是一部分CultureInfo吗?通过格式化,我的意思是,是否将其显示为47.3或0.473等.
我的实际问题是,对于DE语言,我必须使用47.3%表示法,而其他人使用0.473,所以我看这些东西是否也取决于文化,就像用于小数点的符号一样.
我有这样的字符串,我想将其转换为双倍.
string x = "65.50";
double y = Convert.ToDouble(x);
Run Code Online (Sandbox Code Playgroud)
但结果是6550.0
我希望它是65.50.
我正在使用ASP.NET和C#.我认为这是全球化的问题.
这是我的问题抱歉(:
我们刚刚设置了一个新的Windows 2008 R2服务器,当它被设置(包括IIS)时,文化设置设置为英语("美国").然后他们根据其他服务器改为英语("英国").没有其他设置被更改.
IIS设置尚未更改,Web服务中没有设置文化的位置,我还检查了machine.config和web.config - 在所有级别.Net全球化设置为在新旧服务器上保持不变.
但是在新的2008R2服务器中,Threading.Thread.CurrentThread.[CurrentUICulture/CurrentCulture].Name是:
UI Culture = en-US (1033)
Culture = en-US (1033)
Run Code Online (Sandbox Code Playgroud)
在旧服务器(2008年,而不是R2)中,它是:
UI Culture = en-US (1033)
Culture = en-GB (2057)
Run Code Online (Sandbox Code Playgroud)
我们有一些旧的遗留代码,要求默认为en-GB,我需要以与旧服务器相同的方式实现,但无法弄清楚为什么这是默认为en-US而不是en-GB.
我已经检查了这个答案/sf/answers/779473551/,但它没有帮助.(我意识到我可以强迫新服务器这样做).
那么为什么文化违约到了美国呢?
globalization ×10
c# ×5
.net ×3
asp.net ×3
cultureinfo ×2
localization ×2
c#-4.0 ×1
get ×1
iis-7 ×1
performance ×1
set ×1
translation ×1