Intereting Posts

Convertir un file CSV ou une feuille de calcul Excel en file RESX

Je suis à la search d'une solution ou d'une recommandation à un problème que j'ai. J'ai un tas de pages ASPX qui seront localisées et disposeront d'un tas de text qui doit être pris en charge en 6 langues.

Les personnes qui font la traduction n'auront pas access à Visual Studio et l'outil le plus simple est Excel. Si nous utilisons Excel ou même exportons vers CSV, nous devons importer pour passer aux files .resx. Alors, quelle est la meilleure méthode pour cela?

Je suis au courant de cette question, Convertir un file de ressource Visual Studio en file text? déjà et l'utilisation de Resx Editor, mais une solution plus simple serait préférée.

Je ne suis pas sûr de la qualité d'une réponse que vous searchz, mais si vous utilisez vraiment des paires [ssortingng, ssortingng] pour votre localization, et vous cherchez simplement un moyen rapide de charger des ressources (.resx) les files avec les résultats de vos traductions, les éléments suivants fonctionneront comme une solution assez rapide et peu technologique.

La chose à retenir est que les files .resx ne sont que des documents XML, il devrait donc être possible de charger manuellement vos données dans la ressource à partir d'un code externe. L'exemple suivant a fonctionné pour moi dans VS2005 et VS2008:

namespace SampleResourceImport { class Program { static void Main(ssortingng[] args) { XmlDocument doc = new XmlDocument(); ssortingng filePath = @"[file path to your resx file]"; doc.Load(filePath); XmlElement root = doc.DocumentElement; XmlElement datum = null; XmlElement value = null; XmlAtsortingbute datumName = null; XmlAtsortingbute datumSpace = doc.CreateAtsortingbute("xml:space"); datumSpace.Value = "preserve"; // The following mocks the actual resortingeval 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<ssortingng, ssortingng> d = new Dictionary<ssortingng, ssortingng>(); d.Add("Label1", "First Name"); d.Add("Label2", "Last Name"); d.Add("Label3", "Date of Birth"); foreach (KeyValuePair<ssortingng, ssortingng> pair in d) { datum = doc.CreateElement("data"); datumName = doc.CreateAtsortingbute("name"); datumName.Value = pair.Key; value = doc.CreateElement("value"); value.InnerText = pair.Value; datum.Atsortingbutes.Append(datumName); datum.Atsortingbutes.Append(datumSpace); datum.AppendChild(value); root.AppendChild(datum); } doc.Save(filePath); } } } 

De toute évidence, la méthode précédente ne générera pas le code-derrière pour votre ressource, mais l'ouverture du file de ressources dans Visual Studio et la modification du modificateur d'accessibilité pour la ressource (re) généreront les propriétés statiques pour vous.

Si vous searchz une solution complètement basée sur XML (par rapport à CSV ou Excel interop), vous pouvez également requestr à vos traducteurs de stocker leur contenu traduit dans Excel, sauvegardé en tant que XML, puis utilisez XPath pour récupérer vos informations de localization. La seule mise en garde étant la taille des files tend à devenir assez gonflé.

Bonne chance.

J'ai rencontré un problème similaire et j'ai compris que la manière la plus simple de créer un file .resx à partir du file excel utilise une fonction concaténée d'excel pour générer "<" données ">" .. "<" / data ">" nœud pour le. resx, puis copyr manuellement les lignes générées vers le file .resx dans n'importe quel éditeur de text. Donc disons que vous avez "Nom" dans la colonne A d'un document Excel et "valeur" dans la colonne B du document excel. Utilisation de la formule suivante dans la colonne C

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

vous obtiendrez le nœud de données pour la ressource. Vous pouvez ensuite copyr cette formule sur toutes les lignes, puis copyr le contenu de la colonne C dans votre file .resx.

Si c'est dans csv, voici un script Ruby rapide pour générer les éléments de données.

 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!) } exigent 'csv' 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!) } nécessite un 'constructor' 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!) } file = ARGV [0] 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!) } Builder = Builder :: XmlMarkup.new (: indent => 2) 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!) } CSV.foreach (file) do | row | 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!) } builder.data (: name => row [0], "xml: space" =>: preserve) {| d | 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!) } d.value (ligne [1])} 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!) }