Конвертировать файл CSV или таблицу Excel в файл RESX - PullRequest
4 голосов
/ 22 октября 2008

Я ищу решение или рекомендацию по моей проблеме. У меня есть несколько ASPX-страниц, которые будут локализованы и содержат текст, который должен поддерживаться на 6 языках.

Люди, выполняющие перевод, не будут иметь доступа к Visual Studio, и, вероятно, самым простым инструментом является Excel. Если мы используем Excel или даже экспортируем в CSV, нам нужно иметь возможность импортировать для перемещения в файлы .resx. Итак, какой метод лучше для этого?

Мне известен этот вопрос, Преобразовать файл ресурсов Visual Studio в текстовый файл? уже и использовать Resx Editor, но более простое решение было бы предпочтительным.

Ответы [ 3 ]

2 голосов
/ 22 октября 2008

Я не уверен, насколько исчерпывающим является ответ, который вы ищете, но если вы действительно просто используете пары [строка, строка] для своей локализации, и вы просто ищете быстрый способ загрузки ресурса ( .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 для получения информации о локализации. , Единственное предостережение, что размеры файлов имеют тенденцию становиться довольно раздутыми.

Удачи.

1 голос
/ 15 ноября 2012

Я столкнулся с подобной проблемой и понял, что самый простой способ создать файл .resx из файла Excel - использовать функцию сцепления Excel для генерации узла "<" data ">" .. "<" / data ">" для файла .resx, а затем вручную скопировать сгенерированные строки в файл .resx в любом текстовом редакторе. Допустим, у вас есть «Имя» в столбце А документа Excel и «Значение» в столбце Б документа Excel. Используя следующую формулу в столбце C

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

вы получите узел данных для ресурса. Затем вы можете скопировать эту формулу во все строки, а затем скопировать содержимое столбца C в ваш файл .resx.

0 голосов
/ 26 сентября 2013

Если это 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!) }
...