2008-10-21 72 views
4

我要尋找一個解決方案或建議,我有一個問題。我有一堆ASPX頁面將被本地化,並且有一些需要6種語言支持的文本。轉換CSV文件或Excel電子表格文件RESX

的人做翻譯將無法獲得Visual Studio和最簡單的可能的工具是Excel中。如果我們使用Excel甚至導出到CSV,我們需要能夠導入到.resx文件。那麼,對此最好的方法是什麼?

我知道這個問題的,Convert a Visual Studio resource file to a text file?已經和使用RESX編輯器,但一個簡單的解決方案將是首選。

回答

2

我不知道你的答案如何全面的尋找,但如果你真的只是使用[字符串,字符串]對你的定位和你只是尋找一個快速的方式來加載資源(.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); 
     } 
    } 
} 

顯然,上述方法不會產生隱藏代碼爲您的資源,但是打開Visual Studio中的資源文件,並切換無障礙修改爲資源將(重新)爲您生成靜態屬性。

如果您正在尋找一個完全基於XML的解決方案(與CSV或Excel互操作),您還可以指示您的翻譯人員將其翻譯的內容存儲在Excel中,保存爲XML,然後使用XPath檢索您的本地化信息。唯一需要注意的是文件大小往往變得非常臃腫。

祝你好運。

+0

這個工作對resw了。 – b15 2016-06-05 13:51:18

1

我遇到了類似的問題,並意識到從excel文件創建.resx文件的最簡單方法是使用excel的連接函數來生成「<」數據「>」..「<」/ data「>」節點爲.resx文件,然後手動將生成的行復制到任何文本編輯器中的.resx文件。因此可以說,你在excel文檔的A列中有「Name」,在Excel文檔的B列中有「value」。在列C中使用以下公式

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

您將獲得資源的數據節點。然後,您可以將此公式複製到所有行,然後將.C列中的內容複製到.resx文件中。

0

如果它在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!) } 
相關問題