Added TranslationBuilder to turn translations.ods into language ini files

Branch_2.1.x
Nathan Crawford 2013-12-11 18:52:35 -05:00
rodzic 19a1b51ffd
commit 09d0eb536a
17 zmienionych plików z 1058 dodań i 28 usunięć

61
TranslationBuilder/Form1.Designer.cs wygenerowano 100644
Wyświetl plik

@ -0,0 +1,61 @@
namespace TranslationBuilder
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(77, 113);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(133, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Build Translation Files";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
}
}

Wyświetl plik

@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OdsReadWrite;
using System.IO;
namespace TranslationBuilder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<string> languageName = new List<string>();
List<string> outputs = new List<string>();
DataSet theData = new OdsReaderWriter().ReadOdsFile("..\\..\\..\\translations\\translations.ods");
int rowCounter = 0;
foreach (DataRow thisRow in theData.Tables[0].Rows)
{
if (rowCounter == 0)
{
for (int i = 2; i < thisRow.ItemArray.Length; i++)
{
if (!String.IsNullOrEmpty(thisRow.ItemArray[i].ToString()))
{
languageName.Add(thisRow.ItemArray[i].ToString());
outputs.Add("");
}
}
}
else
{
string textId;
if (!String.IsNullOrEmpty(thisRow.ItemArray[0].ToString()))
{
textId = thisRow.ItemArray[0].ToString();
}
else
{
continue;
}
for (int i = 2; i < thisRow.ItemArray.Length; i++)
{
if (!String.IsNullOrEmpty(thisRow.ItemArray[i].ToString()))
{
outputs[i - 2] += textId + "=" + thisRow.ItemArray[i] + Environment.NewLine;
}
}
}
rowCounter++;
}
for (int i = 0; i < outputs.Count; i++)
{
StreamWriter outfile = new StreamWriter("..\\..\\..\\translations\\" + languageName[i] + ".ini");
outfile.WriteLine("# Embroidery Reader language strings file. To translate Embroidery Reader to a new");
outfile.WriteLine("# language, copy this file to a new name and translate each string.");
outfile.WriteLine("# If you make a new translation, please contact me! I'd love to");
outfile.WriteLine("# include your translation with Embroidery Reader.");
outfile.WriteLine("# The best way to contact me is through http://www.njcrawford.com/contact/.");
outfile.Write(outputs[i]);
outfile.Close();
//MessageBox.Show(languageName[i] + Environment.NewLine + outputs[i]);
}
MessageBox.Show("Done");
}
}
}

Wyświetl plik

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,322 @@
using System;
using System.Data;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Xml;
using Ionic.Zip;
namespace OdsReadWrite
{
internal sealed class OdsReaderWriter
{
// Namespaces. We need this to initialize XmlNamespaceManager so that we can search XmlDocument.
private static string[,] namespaces = new string[,]
{
{"table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0"},
{"office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0"},
{"style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0"},
{"text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0"},
{"draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"},
{"fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"},
{"dc", "http://purl.org/dc/elements/1.1/"},
{"meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"},
{"number", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"},
{"presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"},
{"svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"},
{"chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"},
{"dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"},
{"math", "http://www.w3.org/1998/Math/MathML"},
{"form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0"},
{"script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0"},
{"ooo", "http://openoffice.org/2004/office"},
{"ooow", "http://openoffice.org/2004/writer"},
{"oooc", "http://openoffice.org/2004/calc"},
{"dom", "http://www.w3.org/2001/xml-events"},
{"xforms", "http://www.w3.org/2002/xforms"},
{"xsd", "http://www.w3.org/2001/XMLSchema"},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance"},
{"rpt", "http://openoffice.org/2005/report"},
{"of", "urn:oasis:names:tc:opendocument:xmlns:of:1.2"},
{"rdfa", "http://docs.oasis-open.org/opendocument/meta/rdfa#"},
{"config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0"}
};
// Read zip stream (.ods file is zip file).
private ZipFile GetZipFile(Stream stream)
{
return ZipFile.Read(stream);
}
// Read zip file (.ods file is zip file).
private ZipFile GetZipFile(string inputFilePath)
{
return ZipFile.Read(inputFilePath);
}
private XmlDocument GetContentXmlFile(ZipFile zipFile)
{
// Get file(in zip archive) that contains data ("content.xml").
ZipEntry contentZipEntry = zipFile["content.xml"];
// Extract that file to MemoryStream.
Stream contentStream = new MemoryStream();
contentZipEntry.Extract(contentStream);
contentStream.Seek(0, SeekOrigin.Begin);
// Create XmlDocument from MemoryStream (MemoryStream contains content.xml).
XmlDocument contentXml = new XmlDocument();
contentXml.Load(contentStream);
return contentXml;
}
private XmlNamespaceManager InitializeXmlNamespaceManager(XmlDocument xmlDocument)
{
XmlNamespaceManager nmsManager = new XmlNamespaceManager(xmlDocument.NameTable);
for (int i = 0; i < namespaces.GetLength(0); i++)
nmsManager.AddNamespace(namespaces[i, 0], namespaces[i, 1]);
return nmsManager;
}
/// <summary>
/// Read .ods file and store it in DataSet.
/// </summary>
/// <param name="inputFilePath">Path to the .ods file.</param>
/// <returns>DataSet that represents .ods file.</returns>
public DataSet ReadOdsFile(string inputFilePath)
{
ZipFile odsZipFile = this.GetZipFile(inputFilePath);
// Get content.xml file
XmlDocument contentXml = this.GetContentXmlFile(odsZipFile);
// Initialize XmlNamespaceManager
XmlNamespaceManager nmsManager = this.InitializeXmlNamespaceManager(contentXml);
DataSet odsFile = new DataSet(Path.GetFileName(inputFilePath));
foreach (XmlNode tableNode in this.GetTableNodes(contentXml, nmsManager))
odsFile.Tables.Add(this.GetSheet(tableNode, nmsManager));
return odsFile;
}
// In ODF sheet is stored in table:table node
private XmlNodeList GetTableNodes(XmlDocument contentXmlDocument, XmlNamespaceManager nmsManager)
{
return contentXmlDocument.SelectNodes("/office:document-content/office:body/office:spreadsheet/table:table", nmsManager);
}
private DataTable GetSheet(XmlNode tableNode, XmlNamespaceManager nmsManager)
{
DataTable sheet = new DataTable(tableNode.Attributes["table:name"].Value);
XmlNodeList rowNodes = tableNode.SelectNodes("table:table-row", nmsManager);
int rowIndex = 0;
foreach (XmlNode rowNode in rowNodes)
this.GetRow(rowNode, sheet, nmsManager, ref rowIndex);
return sheet;
}
private void GetRow(XmlNode rowNode, DataTable sheet, XmlNamespaceManager nmsManager, ref int rowIndex)
{
XmlAttribute rowsRepeated = rowNode.Attributes["table:number-rows-repeated"];
if (rowsRepeated == null || Convert.ToInt32(rowsRepeated.Value, CultureInfo.InvariantCulture) == 1)
{
while (sheet.Rows.Count < rowIndex)
sheet.Rows.Add(sheet.NewRow());
DataRow row = sheet.NewRow();
XmlNodeList cellNodes = rowNode.SelectNodes("table:table-cell", nmsManager);
int cellIndex = 0;
foreach (XmlNode cellNode in cellNodes)
this.GetCell(cellNode, row, nmsManager, ref cellIndex);
sheet.Rows.Add(row);
rowIndex++;
}
else
{
rowIndex += Convert.ToInt32(rowsRepeated.Value, CultureInfo.InvariantCulture);
}
// sheet must have at least one cell
if (sheet.Rows.Count == 0)
{
sheet.Rows.Add(sheet.NewRow());
sheet.Columns.Add();
}
}
private void GetCell(XmlNode cellNode, DataRow row, XmlNamespaceManager nmsManager, ref int cellIndex)
{
XmlAttribute cellRepeated = cellNode.Attributes["table:number-columns-repeated"];
string cellValue = this.ReadCellValue(cellNode);
int repeats = 1;
if (cellRepeated != null)
{
repeats = Convert.ToInt32(cellRepeated.Value, CultureInfo.InvariantCulture);
}
if (!String.IsNullOrEmpty(cellValue))
{
for (int i = 0; i < repeats; i++)
{
DataTable sheet = row.Table;
while (sheet.Columns.Count <= cellIndex)
sheet.Columns.Add();
row[cellIndex] = cellValue;
cellIndex++;
}
}
else
{
cellIndex += repeats;
}
}
private string ReadCellValue(XmlNode cell)
{
XmlAttribute cellVal = cell.Attributes["office:value"];
if (cellVal == null)
return String.IsNullOrEmpty(cell.InnerText) ? null : cell.InnerText;
else
return cellVal.Value;
}
/// <summary>
/// Writes DataSet as .ods file.
/// </summary>
/// <param name="odsFile">DataSet that represent .ods file.</param>
/// <param name="outputFilePath">The name of the file to save to.</param>
public void WriteOdsFile(DataSet odsFile, string outputFilePath)
{
ZipFile templateFile = this.GetZipFile(Assembly.GetExecutingAssembly().GetManifestResourceStream("OdsReadWrite.template.ods"));
XmlDocument contentXml = this.GetContentXmlFile(templateFile);
XmlNamespaceManager nmsManager = this.InitializeXmlNamespaceManager(contentXml);
XmlNode sheetsRootNode = this.GetSheetsRootNodeAndRemoveChildrens(contentXml, nmsManager);
foreach (DataTable sheet in odsFile.Tables)
this.SaveSheet(sheet, sheetsRootNode);
this.SaveContentXml(templateFile, contentXml);
templateFile.Save(outputFilePath);
}
private XmlNode GetSheetsRootNodeAndRemoveChildrens(XmlDocument contentXml, XmlNamespaceManager nmsManager)
{
XmlNodeList tableNodes = this.GetTableNodes(contentXml, nmsManager);
XmlNode sheetsRootNode = tableNodes.Item(0).ParentNode;
// remove sheets from template file
foreach (XmlNode tableNode in tableNodes)
sheetsRootNode.RemoveChild(tableNode);
return sheetsRootNode;
}
private void SaveSheet(DataTable sheet, XmlNode sheetsRootNode)
{
XmlDocument ownerDocument = sheetsRootNode.OwnerDocument;
XmlNode sheetNode = ownerDocument.CreateElement("table:table", this.GetNamespaceUri("table"));
XmlAttribute sheetName = ownerDocument.CreateAttribute("table:name", this.GetNamespaceUri("table"));
sheetName.Value = sheet.TableName;
sheetNode.Attributes.Append(sheetName);
this.SaveColumnDefinition(sheet, sheetNode, ownerDocument);
this.SaveRows(sheet, sheetNode, ownerDocument);
sheetsRootNode.AppendChild(sheetNode);
}
private void SaveColumnDefinition(DataTable sheet, XmlNode sheetNode, XmlDocument ownerDocument)
{
XmlNode columnDefinition = ownerDocument.CreateElement("table:table-column", this.GetNamespaceUri("table"));
XmlAttribute columnsCount = ownerDocument.CreateAttribute("table:number-columns-repeated", this.GetNamespaceUri("table"));
columnsCount.Value = sheet.Columns.Count.ToString(CultureInfo.InvariantCulture);
columnDefinition.Attributes.Append(columnsCount);
sheetNode.AppendChild(columnDefinition);
}
private void SaveRows(DataTable sheet, XmlNode sheetNode, XmlDocument ownerDocument)
{
DataRowCollection rows = sheet.Rows;
for (int i = 0; i < rows.Count; i++)
{
XmlNode rowNode = ownerDocument.CreateElement("table:table-row", this.GetNamespaceUri("table"));
this.SaveCell(rows[i], rowNode, ownerDocument);
sheetNode.AppendChild(rowNode);
}
}
private void SaveCell(DataRow row, XmlNode rowNode, XmlDocument ownerDocument)
{
object[] cells = row.ItemArray;
for (int i = 0; i < cells.Length; i++)
{
XmlElement cellNode = ownerDocument.CreateElement("table:table-cell", this.GetNamespaceUri("table"));
if (row[i] != DBNull.Value)
{
// We save values as text (string)
XmlAttribute valueType = ownerDocument.CreateAttribute("office:value-type", this.GetNamespaceUri("office"));
valueType.Value = "string";
cellNode.Attributes.Append(valueType);
XmlElement cellValue = ownerDocument.CreateElement("text:p", this.GetNamespaceUri("text"));
cellValue.InnerText = row[i].ToString();
cellNode.AppendChild(cellValue);
}
rowNode.AppendChild(cellNode);
}
}
private void SaveContentXml(ZipFile templateFile, XmlDocument contentXml)
{
templateFile.RemoveEntry("content.xml");
MemoryStream memStream = new MemoryStream();
contentXml.Save(memStream);
memStream.Seek(0, SeekOrigin.Begin);
templateFile.AddEntry("content.xml", memStream);
}
private string GetNamespaceUri(string prefix)
{
for (int i = 0; i < namespaces.GetLength(0); i++)
{
if (namespaces[i, 0] == prefix)
return namespaces[i, 1];
}
throw new InvalidOperationException("Can't find that namespace URI");
}
}
}

Wyświetl plik

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace TranslationBuilder
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

Wyświetl plik

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("TranslationBuilder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TranslationBuilder")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0d502bfb-4e4a-4ffa-9006-8480b142ce68")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Wyświetl plik

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TranslationBuilder.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TranslationBuilder.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

Wyświetl plik

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Wyświetl plik

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace TranslationBuilder.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

Wyświetl plik

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Wyświetl plik

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TranslationBuilder</RootNamespace>
<AssemblyName>TranslationBuilder</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ionic.Zip">
<HintPath>.\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="OdsReaderWriter.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Wyświetl plik

@ -15,34 +15,88 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryThumbs", "embroid
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Installer", "Installer\Installer.vdproj", "{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranslationBuilder", "TranslationBuilder\TranslationBuilder.csproj", "{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|x86.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Any CPU.Build.0 = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|x86.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|x86.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Any CPU.Build.0 = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|x86.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|x86.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Any CPU.Build.0 = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|x86.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|x86.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Any CPU.Build.0 = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|x86.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|x86.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Any CPU.Build.0 = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|x86.ActiveCfg = Release|Any CPU
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Debug|Any CPU.ActiveCfg = Debug
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Debug|Mixed Platforms.ActiveCfg = Debug
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Debug|Mixed Platforms.Build.0 = Debug
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Debug|x86.ActiveCfg = Debug
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Debug|x86.Build.0 = Debug
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Release|Any CPU.ActiveCfg = Release
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Release|Mixed Platforms.ActiveCfg = Release
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Release|Mixed Platforms.Build.0 = Release
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Release|x86.ActiveCfg = Release
{9E2138D0-FCD6-49A8-A6A9-4525E61BD25B}.Release|x86.Build.0 = Release
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Any CPU.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Mixed Platforms.Build.0 = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|x86.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|x86.Build.0 = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Any CPU.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Mixed Platforms.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Mixed Platforms.Build.0 = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|x86.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Wyświetl plik

@ -74,8 +74,12 @@ namespace embroideryReader
NEW_VERSION_QUESTION,
NEW_VERSION_TITLE,
DEBUG_INFO_SAVED,
DRAW_BACKGROUND_GRID,
ENABLE_TRANSPARENCY_GRID,
LANGUAGE,
GRID_SIZE,
// This must be last. Used for checking completeness of translation files.
TOTAL_COUNT,
};
IniFile translationFile;
@ -119,5 +123,23 @@ namespace embroideryReader
}
return retval;
}
// Returns true if the loaded translation file contains all expected
// string IDs, or false if not.
public bool IsComplete()
{
bool retval = true;
for (StringID sid = (StringID)0; sid < StringID.TOTAL_COUNT; sid++)
{
if (translationFile.getValue(sid.ToString()) == null)
{
retval = false;
break;
}
}
return retval;
}
}
}

Wyświetl plik

@ -1,27 +1,27 @@
# English language strings file. To translate Embroidery Reader to a new
# Embroidery Reader language strings file. To translate Embroidery Reader to a new
# language, copy this file to a new name and translate each string.
# If you make a new translation, please contact me! I'd love to
# include your translation with Embroidery Reader.
# The best way to contact me is through http://www.njcrawford.com/contact/.
UNSUPPORTED_FORMAT=The format of this file is not completely supported
COLOR_WARNING=Colors shown for this design may be inaccurate
ERROR_FILE=An error occured while reading the file:
ERROR_FILE=An error occurred while reading the file:
CORRUPT_FILE=This file is either corrupt or not a valid PES file.
FILE_TYPE_PES=Embroidery Files
FILE_TYPE_ALL=All Files
ABOUT_MESSAGE=EmbroideryReader version {0}. This program reads and displays embroidery designs from .PES files.
ERROR_UPDATE=Encountered an error while checking for updates:
VERSION=Version
ERROR_WEBPAGE=An error occured while trying to open the webpage:
NO_UPDATE=No updates are available right now.
ERROR_DEBUG=There was an error while saving debug info:
NO_DESIGN=No design loaded.
UNSUPPORTED_CLASS=This file contains a class that is not yet supported
FILE_TYPE_BMP=Bitmap
FILE_TYPE_PNG=PNG
FILE_TYPE_JPG=JPEG
FILE_TYPE_GIF=GIF
FILE_TYPE_TIFF=TIFF
ABOUT_MESSAGE=Embroidery Reader version {0}. This program reads and displays embroidery designs from .PES files.
ERROR_UPDATE=Encountered an error while checking for updates:
VERSION=Version
ERROR_WEBPAGE=An error occurred while trying to open the webpage:
NO_UPDATE=No updates are available right now.
ERROR_DEBUG=There was an error while saving debug info:
NO_DESIGN=No design loaded.
UNSUPPORTED_CLASS=This file contains a class that is not yet supported
IMAGE_SAVED=Image saved
MENU_FILE=File
MENU_OPEN=Open...
@ -56,8 +56,8 @@ LATEST_VERSION=(Latest version is {0}, you have version {1})
NEW_VERSION_MESSAGE=Version {0} was released on {1}. You have version {2}.
NEW_VERSION_QUESTION=Would you like to go to the Embroidery Reader website to download or find out more about the new version?
NEW_VERSION_TITLE=New version available
DEBUG_INFO_SAVED=Saved debug info to {0}
DRAW_BACKGROUND_GRID=Enable transparency grid
DEBUG_INFO_SAVED=Debug info was saved to {0}
ENABLE_TRANSPARENCY_GRID=Enable transparency grid
LANGUAGE=Language
OK=OK
GRID_SIZE=Grid size:

Wyświetl plik

@ -1,15 +1,12 @@
UNSUPPORTED_FORMAT=Il formato di questo file non è pienamente supportato
# Embroidery Reader language strings file. To translate Embroidery Reader to a new
# language, copy this file to a new name and translate each string.
# If you make a new translation, please contact me! I'd love to
# include your translation with Embroidery Reader.
# The best way to contact me is through http://www.njcrawford.com/contact/.
UNSUPPORTED_FORMAT=Il formato di questo file non è pienamente supportato
COLOR_WARNING=I colori mostrati per questo progetto potrebbero non essere precisi
ERROR_FILE=Si è verificato un errore durante la lettura del file:
CORRUPT_FILE=Questo file è corrotto oppure non è un file PES valido.
VERSION_MESSAGE=Versione EmbroideryReader
ERROR_UPDATE=Si è verificato un errore durante il controllo degli aggiornamenti:
VERSION=Versione
ERROR_WEBPAGE=Si è verificato un errore durante l'apertura della pagina web:
NO_UPDATE=Nessun aggiornamento disponibile al momento.
ERROR_DEBUG=Si è verificato un errore durante il salvataggio delle informazioni di debug:
NO_DESIGN=Nessun progetto caricato.
UNSUPPORTED_CLASS=Questo file contiene una classe che non è ancora supportata
FILE_TYPE_PES=Files Embroidery
FILE_TYPE_ALL=Tutti i File
FILE_TYPE_BMP=Bitmap
@ -17,6 +14,14 @@ FILE_TYPE_PNG=PNG
FILE_TYPE_JPG=JPEG
FILE_TYPE_GIF=GIF
FILE_TYPE_TIFF=TIFF
ABOUT_MESSAGE=Versione Embroidery Reader {0}. Questo programma legge e visualizza progetti di ricamo da files .PES.
ERROR_UPDATE=Si è verificato un errore durante il controllo degli aggiornamenti:
VERSION=Versione
ERROR_WEBPAGE=Si è verificato un errore durante l'apertura della pagina web:
NO_UPDATE=Nessun aggiornamento disponibile al momento.
ERROR_DEBUG=Si è verificato un errore durante il salvataggio delle informazioni di debug:
NO_DESIGN=Nessun progetto caricato.
UNSUPPORTED_CLASS=Questo file contiene una classe che non è ancora supportata
IMAGE_SAVED=Immagine salvata
MENU_FILE=File
MENU_OPEN=Apri...
@ -48,10 +53,8 @@ REMOVE_UGLY_STITCHES=Rimuovi i punti di ricamo 'orrendi'
UGLY_STITCH_LENGTH=Lunghezza di un punto orrendo:
SETTINGS=Impostazioni di Embroidery Reader
LATEST_VERSION=(L'ultima versione è la {0}, stai utilizzando la versione {1})
NEW_VERSION_MESSAGE=Il {2} è stata rilasciata la versione {1}.
Stai utilizzando la versione {3}.
NEW_VERSION_MESSAGE=Il {1} è stata rilasciata la versione {0}. Stai utilizzando la versione {2}.
NEW_VERSION_QUESTION=Vuoi andare al sito di Embroidery Reader per scaricare la nuova versione o per saperne di più?
NEW_VERSION_TITLE=Nuova versione disponibile
ABOUT_MESSAGE=Versione Embroidery Reader {0}. Questo programma legge e visualizza progetti di ricamo da files .PES
LANGUAGE=Lingua
OK=OK
LANGUAGE=Lingua
OK=OK

Plik binarny nie jest wyświetlany.