Tag: 国际化

如何用另一种语言翻译网站?(ASP .NET,c#)

我开发了一个大型商业门户网站。 我刚刚意识到我需要用另一种语言建立我的网站。 我研究过像这样的解决方案 在我的网站上使用第三方控件。 (适合我的设计。对于SEO的观点没有用。不想显示第三方品牌名称。) 为每种语言创建资源文件。(重构页面以使用资源文件中的文本需要大量工作。用户输入的数据如“业务描述”。) 还有其他选择吗? 我想的是一个解决方案,比如在服务器端创建页面然后我可以在发送回客户端之前翻译它。 有什么方法可以做到吗?(翻译所有内容,包括从数据库或代码中添加的数据。而不影响设计。)

有哪些优秀的非英语短语有单数和复数forms可用于测试国际化和本地化库?

我一直在研究.NET库来协助应用程序的国际化。 它是用C#编写的,名为SmartFormat ,在GitHub上是开源的。 它包含多种语言的语法数字规则,可根据模板和语言环境确定正确的单数/复数forms。 规则是从Unicode语言复数规则获得的 。 翻译具有依赖于数量的单词的短语(例如名词,动词和形容词)时,指定多个表单,格式化程序根据这些规则选择正确的表单。 英语示例:(注意语法与String.Format几乎相同) var message = “There {0:is:are} {0} {0:item:items} remaining.”; var output = Smart.Format(culture, message, items.Count); 我想为许多支持的语言编写unit testing。 但是,我只会说英语和西class牙语(两者都有相同的语法编号规则)。 有哪些优秀的非英语测试用语可用于这些unit testing? 我正在寻找类似于”There {0:is:are} {0} {0:item:items} remaining.”短语”There {0:is:are} {0} {0:item:items} remaining.” 。 请注意此示例如何根据数量需要特定的动词和名词。 关于语法的说明 : 此库查找:分隔的单词,并根据为语言环境定义的规则选择正确的单词。 例如,在波兰语中,“文件”一词有3种复数forms:1“plik”,2-4“pliki”,5-21“plików”。 因此,您将在格式字符串中指定所有3个表单: “{0} {0:plik:pliki:plików}” 。 这些单词通常从最小可能值到最大值排序,例如”{0:zero:one:two:few:many:other}” ,由Unicode语言复数规则定义。 这里已经讨论了有关此代码的其他信息: 单数/复数单词的本地化 – 语法数字的不同语言规则是什么?

C#,Localization,Resources和MonoDevelop

我的问题是 :使用MonoDevelop(这是我正在处理的许多项目的首选环境)我正在试图找出如何使用资源文件来处理本地化消息以及如何将它们正确地包含在项目中作为嵌入式资源。 我的目标是为消息键及其值创建一个具有简单名称 – 值对的资源文件,并为其本地化字符串提供单独的文件,例如 Messages.resources Hello.World = Hello World Goodbye.Cruel.World = Goodbye, Cruel World Messages.de.resources Hello.World = Hallo Welt Goodbye.Cruel.World = Auf Wiedersehen, grausame Welt 我有几个问题。 首先 ,MonoDevelop的.resources文件和Visual Studio的资源概念之间有什么区别(如果有的话)。 据我所知,MonoDevelop(和SharpDevelop)允许您创建.resources文件,而Visual Studio使用.resx文件并通过resgen实用程序将它们编译成.resources文件(二进制文件类型)。 在MonoDevelop中使用资源时,我是否需要使用resgen编译我的资源(例如Messages.resources)? 当我尝试使用MonoDevelop允许我通过他们的向导创建的直接.resources文件时,我收到以下错误: “Stream不是有效的资源文件。” 其次 ,一旦我有一个适当生成的资源文件,我就可以将它们嵌入到我的项目中,如果我理解正确的话,它会使资源成为程序集的一部分。 如果我有两个文件,Messages.resources和Messages.de.resources,MonoDevelop(至少)在嵌入它们时为它们分配相同的ID值。 我是否需要在项目中包含我的默认本地化,然后为每个受支持的区域设置单独的项目? 接下来,C#如何区分我的Messages.resources和Messages.de.resources文件(或者它们是什么文件)? 我目前正在尝试使用以下代码解析我的消息资源: … public string Translate(string messageKey, CultureInfo cultureInfo) { ResourceManager resourceManager = new ResourceManager(“My.Project.Messages”, Assembly.GetExecutingAssembly()); […]

initializeCulture of pages在masterPage中的下拉列表的selectedIndexChange之前触发

我有一个带有语言选择器下拉列表的母版页 它有多个使用母版页的子页面,但是在子页面中(我创建了一个basePage类,然后让页面inheritance)我覆盖了initializeCulture。 像这样: protected override void InitializeCulture() { String selectedLanguage = Common.SessionManager.Language; if (selectedLanguage == “”) { selectedLanguage = ConfigurationManager.AppSettings.Get(“defaultLanguage”); } if (selectedLanguage == “”) { selectedLanguage = “nl-BE”; } UICulture = selectedLanguage; Culture = selectedLanguage; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); base.InitializeCulture(); } 在下拉列表的SelectedIndexChanged事件中,我在会话中设置新语言,如下所示: protected void LanguageSelectorSelectedIndexChanged(object sender, EventArgs e) { string sCulture […]

C#中Form中的RightToLeft属性

我想从左侧到右侧移动表单标题,图标和关闭以及帮助按钮(更改布局)。 我手动移动表单控件以保留背景图像,但现在我想更改表单标题。 当我在表单属性中将rightToLeft属性设置为yes并将rightToLeftLayout设置为true时,背景图像消失,但它使用属性“BackColor” 我的代码如下: if (_lang == ‘Arabic’) { this.RightToLeft = RightToLeft.Yes; this.RightToLeftLayout = true; } 但它保持按钮图像。 那为什么呢?

在文化发展的同时,将日期格式更改为en-us

我正在用法语本地化一个网站。 但是我不应该将日期格式更改为法语。 它必须按照en-us格式保留,即使文化被设置为fr-ca,即当其他内容是法语时,日期格式仍然应该是英语(en-us)。

C#:如何将winforms按钮的文本绑定到资源

我们有一个资源文件,其中包含许多已翻译的字符串,在我们的应用程序中使 是否有更好的方法将按钮的文本绑定到某个字符串? 目前我们通常只是在构造函数,Load事件处理程序或其中一个调用的方法中执行类似的操作: someButton.Text = CommonTexts.SomeString; someMenuItem.Text = CommonTexts.SomeOtherString; 有没有更好的方法呢? 也许在设计师? 或者这是推荐的做法吗? 只是为了让您知道我们如何进行实际翻译:我们有一个只包含resx文件的类库项目。 主要的resx文件是用英语写的(当然)。 然后,我们在名为ResEx的应用程序中打开这些基本resx文件,我们(或其他人)将其翻译成其他语言。 编译时,Visual Studio会自动为每种语言创建程序集,这些程序集将根据当前文化集自动使用。 这非常有效,所以我真的不需要关于如何进行翻译的信息(虽然我总是对改进当然感到好奇)。 我要问的是,是否有更好的方法可以从资源程序集中获取所有翻译的字符串,并将其转换为所有各种Text属性。

如何大写日期和月份ToLongDateString()的第一个字母导致es-mx文化?

目前我在es-MX Culture中使用以下C#代码行获得以下结果 Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(“es-mx”); miércoles,22 de octubre de 2008 我想获得以下内容 Miércoles,22 de Octubre de 2008 我需要建立自己的文化吗?

如何将表示C#枚举值的字符串国际化?

我已经看到很多关于将字符串映射到枚举的问题和答案,反之亦然,但是如何将一系列本地化字符串映射到枚举? 我应该只创建一个这样的扩展方法 ,从资源文件中返回正确的字符串吗? 有没有办法本地化这样的解决方案中使用的属性(如“描述”)? 哪个是首选解决方案 – 扩展方法或属性。 在我看来,这不是属性的预期目的。 事实上,现在我考虑一下,如果我使用扩展方法,属性似乎是我用来在资源文件中为我想要用来代替枚举值的本地化字符串指定一个键。 编辑 – 示例: 鉴于以下枚举, public enum TransactionTypes { Cheque = 1, BankTransfer = 2, CreditCard = 3 } 我想要一种方法将每种类型映射到本地化的字符串。 我开始使用枚举的扩展方法,该方法使用switch语句和对资源文件的强类型引用。 但是,每个枚举的扩展方法似乎不是一个很好的解决方案。 我已经开始关注此操作 ,为每个枚举值创建一个自定义属性。 该属性具有包含本地化字符串的资源文件的基本名称和密钥。 例如,在上面的枚举中,我有: … [EnumResourceAttribute(“FinancialTransaction”, “Cheque”)] Cheque = 1, … 其中“FinanacialTransaction”是resx文件,“Check”是字符串键。 我正在尝试创建一个实用工具方法,我可以从任何枚举中传递任何值,并让它返回该值的本地化字符串表示forms,假设指定了自定义属性。 我无法弄清楚如何动态访问资源文件及其中的密钥。

为Enums提供本地化的最佳方式是什么?

我正在编写一个使用很多枚举的多语言应用程序,我希望实现以下目标: 将枚举名称显示为本地化字符串 使用属性提供本地化描述 启用语言敏感的枚举解析回int值 我热衷于使用属性+资源文件来修饰枚举,以便可以从运行时类型信息中访问本地化字符串。 在使用静态成员而不是枚举声明静态类之前,我一直沿着这条路走下去,但这解决了很多问题。 某种类型的基于TypeDescriptor的机制是否合适? 甚至可能吗? 此外 – 如何以干净,通用,可重复使用的方式实现目标#3? 自从提出这个问题以来,我已经完成了需要可本地化的枚举显示的开源库。 我选择了实现TypeConverters的技术。 完整资料来源于http://measures.codeplex.com/