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

Asp.net 将CSV文件或Excel电子表格转换为RESX文件,asp.net,excel,csv,globalization,Asp.net,Excel,Csv,Globalization,我正在寻找一个解决方案或建议,我有一个问题。我有一堆ASPX页面,这些页面将被本地化,并且有一堆文本需要用6种语言支持 翻译人员将无法访问Visual Studio,最简单的工具可能是Excel。如果我们使用Excel甚至导出到CSV,我们需要能够导入到.resx文件。那么,什么是最好的方法呢 我已经知道这个问题,并且知道如何使用Resx编辑器,但最好是一个更简单的解决方案。我不确定您想要的答案有多全面,但如果您真的只是使用[string,string]对进行本地化,并且您只是想寻找一种快速加载

我正在寻找一个解决方案或建议,我有一个问题。我有一堆ASPX页面,这些页面将被本地化,并且有一堆文本需要用6种语言支持

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


我已经知道这个问题,并且知道如何使用Resx编辑器,但最好是一个更简单的解决方案。

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

要记住的是.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);
        }
    }
}
命名空间采样器源端口
{
班级计划
{
静态void Main(字符串[]参数)
{
XmlDocument doc=新的XmlDocument();
字符串filePath=@“[resx文件的文件路径]”;
文档加载(文件路径);
XmlElement根=doc.DocumentElement;
XmlElement数据=null;
XmlElement值=null;
xmldattribute datumName=null;
xmldattribute datumSpace=doc.CreateAttribute(“xml:space”);
datumSpace.Value=“保留”;
//以下模拟对本地化文本的实际检索
//从CSV或?文档。。。
//CSV解析器非常常见,应该不会太难
//如果那是你要去的方向,就去找一个。
字典d=新字典();
d、 添加(“标签1”,“名字”);
d、 添加(“标签2”,“姓氏”);
d、 添加(“标签3”,“出生日期”);
foreach(d中的KeyValuePair对)
{
数据=doc.CreateElement(“数据”);
datumName=doc.CreateAttribute(“名称”);
datumName.Value=pair.Key;
值=doc.CreateElement(“值”);
value.InnerText=pair.value;
datum.Attributes.Append(datumName);
datum.Attributes.Append(datumSpace);
数据。追加子项(值);
root.AppendChild(数据);
}
单据保存(文件路径);
}
}
}
显然,前面的方法不会为您的资源生成代码,但是在VisualStudio中打开资源文件并切换资源的可访问性修饰符将(重新)为您生成静态属性

如果您正在寻找一个完全基于XML的解决方案(vs.CSV或Excel interop),您还可以指示翻译人员将翻译后的内容存储在Excel中,保存为XML,然后使用XPath检索本地化信息。唯一需要注意的是,文件大小往往会变得非常臃肿


祝你好运。

我遇到了类似的问题,并意识到从excel文件创建.resx文件的最简单方法是使用excel的连接函数为.resx文件生成“..”节点,然后在任何文本编辑器中将生成的行手动复制到.resx文件。假设excel文档A列中有“名称”,excel文档B列中有“值”。在C列中使用以下公式

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

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

如果是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!) }