将CSV文件或Excel电子表格转换为RESX文件

我正在寻找一个解决scheme或build议来解决我遇到的问题。 我有一堆将被本地化的ASPX页面,并且有一些需要6种语言支持的文本。

翻译人员将无法访问Visual Studio,可能最简单的工具是Excel。 如果我们使用Excel甚至导出到CSV,我们需要能够导入移动到.resx文件。 那么,这个最好的方法是什么?

我知道这个问题, 将Visual Studio资源文件转换为文本文件? 已经和Resx Editor的使用,但更容易的解决scheme将是首选。

我不确定你要找的答案有多全面,但如果你真的只是使用[string,string]对来进行本地化,而你只是寻找一种快速的方式来加载资源(.resx)文件与您的翻译结果,那么以下将作为一个相当快速,低技术解决scheme。

需要记住的是.resx文件只是XML文档,所以应该可以通过外部代码手动将数据加载到资源中。 下面的例子在VS2005和VS2008中为我工作:

namespace SampleResourceImport { class Program { static void Main(string[] args) { XmlDocument doc = new XmlDocument(); string filePath = @"[file path to your resx file]"; doc.Load(filePath); XmlElement root = doc.DocumentElement; XmlElement datum = null; XmlElement value = null; XmlAttribute datumName = null; XmlAttribute datumSpace = doc.CreateAttribute("xml:space"); datumSpace.Value = "preserve"; // The following mocks the actual retrieval of your localized text // from a CSV or ?? document... // CSV parsers are common enough that it shouldn't be too difficult // to find one if that's the direction you go. Dictionary<string, string> d = new Dictionary<string, string>(); d.Add("Label1", "First Name"); d.Add("Label2", "Last Name"); d.Add("Label3", "Date of Birth"); foreach (KeyValuePair<string, string> pair in d) { datum = doc.CreateElement("data"); datumName = doc.CreateAttribute("name"); datumName.Value = pair.Key; value = doc.CreateElement("value"); value.InnerText = pair.Value; datum.Attributes.Append(datumName); datum.Attributes.Append(datumSpace); datum.AppendChild(value); root.AppendChild(datum); } doc.Save(filePath); } } } 

显然,前面的方法不会为您的资源生成代码隐藏,但是在Visual Studio中打开资源文件并切换资源的辅助function修饰符将(重新)为您生成静态属性。

如果您正在寻找完全基于XML的解决scheme(与CSV或Excel互操作),您还可以指示您的翻译人员将其翻译的内容存储在Excel中,保存为XML,然后使用XPath检索您的本地化信息。 唯一的警告是文件大小往往变得非常臃肿。

祝你好运。

我碰到类似的问题,并意识到从excel文件创build.resx文件最简单的方法是使用excel的连接函数来生成“<”data“>”..“<”/ data“>”节点。 resx文件,然后手动将生成的行复制到任何文本编辑器中的.resx文件中。 因此可以说,你在excel文件的A列中有“Name”,在Excel文件的B列中有“value”。 在列C中使用以下公式

 =CONCATENATE("<data name=","""",A14,""" xml:space=""preserve"">","<value>", B14, "</value>", "</data>") 

您将获得资源的数据节点。 然后,可以将此公式复制到所有行,然后将.C列中的内容复制到.resx文件中。

如果它是在csv这里是一个快速的Ruby脚本来生成数据元素。

 require 'csv' require 'builder' file = ARGV[0] builder = Builder::XmlMarkup.new(:indent => 2) CSV.foreach(file) do |row| builder.data(:name => row[0], "xml:space" => :preserve) {|d| d.value(row[1]) } end File.open(file + ".xml", 'w') { |f| f.write(builder.target!) }