diff --git a/CMakeLists.txt b/CMakeLists.txt index dc91ef4..acbb3aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ find_package(Qt5Widgets 5.4 REQUIRED) find_package(Qt5PrintSupport 5.4 REQUIRED) find_package(Qt5Xml 5.4 REQUIRED) find_package(Qt5Svg 5.4 REQUIRED) +find_package(Qt5LinguistTools) if (MINGW) # Locate Qt directories @@ -49,6 +50,7 @@ find_package(ZLIB 1.2 REQUIRED) #======================================= add_subdirectory (glabels) add_subdirectory (templates) +add_subdirectory (translations) add_subdirectory (data) diff --git a/README.md b/README.md index 6f813c4..2c0141a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ It is still missing several features to bring it in parity with glabels-3.4. Th - Compatability with older glabels files - Batch mode - Internationalization -- Product template designer +- Custom product templates designer - Online manual ## Build Instructions @@ -48,7 +48,7 @@ These include * Help is needed writing online documentation. -* Help is needed setting up internationalization and writing translations. +* Help is needed writing translations. * Suggestions. diff --git a/glabels/BarcodeBackends.h b/glabels/BarcodeBackends.h index f53b02b..54435d3 100644 --- a/glabels/BarcodeBackends.h +++ b/glabels/BarcodeBackends.h @@ -38,7 +38,9 @@ namespace glabels /// class BarcodeBackends : public QObject { + Q_OBJECT + ///////////////////////////////// // Life Cycle ///////////////////////////////// diff --git a/glabels/CMakeLists.txt b/glabels/CMakeLists.txt index a49857e..7661d36 100644 --- a/glabels/CMakeLists.txt +++ b/glabels/CMakeLists.txt @@ -101,6 +101,7 @@ set (glabels_sources set (glabels_qobject_headers AboutDialog.h + BarcodeBackends.h BarcodeMenu.h BarcodeMenuButton.h BarcodeMenuItem.h diff --git a/glabels/Config.h.in b/glabels/Config.h.in index 78b85c5..1c60c97 100644 --- a/glabels/Config.h.in +++ b/glabels/Config.h.in @@ -28,6 +28,7 @@ namespace glabels namespace Config { const QString PROJECT_SOURCE_DIR = "@glabels_SOURCE_DIR@"; + const QString PROJECT_BUILD_DIR = "@glabels_BINARY_DIR@"; } } diff --git a/glabels/Db.cpp b/glabels/Db.cpp index 66fc0ae..6d62a69 100644 --- a/glabels/Db.cpp +++ b/glabels/Db.cpp @@ -21,12 +21,12 @@ #include "Db.h" -#include #include #include #include "Config.h" #include "StrUtil.h" +#include "FileUtil.h" #include "XmlCategoryParser.h" #include "XmlPaperParser.h" #include "XmlTemplateParser.h" @@ -603,32 +603,9 @@ namespace glabels } - QDir Db::systemTemplatesDir() - { - QDir dir; - - // First, try finding templates directory relative to application path - dir.cd( QApplication::applicationDirPath() ); - if ( (dir.dirName() == "bin") && - dir.cdUp() && dir.cd( "share" ) && dir.cd( "glabels-qt" ) && dir.cd( "templates" ) ) - { - return dir; - } - - // Next, try running out of the source directory. - if ( dir.cd( Config::PROJECT_SOURCE_DIR ) && dir.cd( "templates" ) ) - { - return dir; - } - - qFatal( "Cannot find template directory!" ); - return QDir("/"); - } - - void Db::readPapers() { - readPapersFromDir( systemTemplatesDir() ); + readPapersFromDir( FileUtil::systemTemplatesDir() ); } @@ -648,7 +625,7 @@ namespace glabels void Db::readCategories() { - readCategoriesFromDir( systemTemplatesDir() ); + readCategoriesFromDir( FileUtil::systemTemplatesDir() ); } @@ -668,7 +645,7 @@ namespace glabels void Db::readVendors() { - readVendorsFromDir( systemTemplatesDir() ); + readVendorsFromDir( FileUtil::systemTemplatesDir() ); } @@ -688,7 +665,7 @@ namespace glabels void Db::readTemplates() { - readTemplatesFromDir( systemTemplatesDir() ); + readTemplatesFromDir( FileUtil::systemTemplatesDir() ); // TODO: Read user directories diff --git a/glabels/FileUtil.cpp b/glabels/FileUtil.cpp index 3347ad8..b64a602 100644 --- a/glabels/FileUtil.cpp +++ b/glabels/FileUtil.cpp @@ -20,23 +20,68 @@ #include "FileUtil.h" +#include + +#include "Config.h" + namespace glabels { - namespace FileUtil + QString FileUtil::addExtension( const QString& rawFilename, const QString& extension ) { - - QString addExtension( const QString& rawFilename, const QString& extension ) + if ( rawFilename.endsWith( extension ) ) { - if ( rawFilename.endsWith( extension ) ) - { - return rawFilename; - } - - return rawFilename + extension; + return rawFilename; } + return rawFilename + extension; + } + + + QDir FileUtil::systemTemplatesDir() + { + QDir dir; + + // First, try finding templates directory relative to application path + dir.cd( QApplication::applicationDirPath() ); + if ( (dir.dirName() == "bin") && + dir.cdUp() && dir.cd( "share" ) && dir.cd( "glabels-qt" ) && dir.cd( "templates" ) ) + { + return dir; + } + + // Next, try running out of the source directory. + if ( dir.cd( Config::PROJECT_SOURCE_DIR ) && dir.cd( "templates" ) ) + { + return dir; + } + + qFatal( "Cannot locate system template directory!" ); + return QDir("/"); + } + + + QDir FileUtil::translationsDir() + { + QDir dir; + + // First, try finding translations directory relative to application path + dir.cd( QApplication::applicationDirPath() ); + if ( (dir.dirName() == "bin") && + dir.cdUp() && dir.cd( "share" ) && dir.cd( "glabels-qt" ) && dir.cd( "translations" ) ) + { + return dir; + } + + // Next, try running out of the source directory. + if ( dir.cd( Config::PROJECT_BUILD_DIR ) && dir.cd( "translations" ) ) + { + return dir; + } + + qFatal( "Cannot locate system template directory!" ); + return QDir("/"); } } diff --git a/glabels/FileUtil.h b/glabels/FileUtil.h index cea32d9..953de04 100644 --- a/glabels/FileUtil.h +++ b/glabels/FileUtil.h @@ -23,6 +23,7 @@ #include +#include namespace glabels @@ -33,6 +34,10 @@ namespace glabels QString addExtension( const QString& rawFilename, const QString& extension ); + QDir systemTemplatesDir(); + QDir userTemplatesDir(); + + QDir translationsDir(); } } diff --git a/glabels/FrameCd.h b/glabels/FrameCd.h index 0d8f0e7..984c786 100644 --- a/glabels/FrameCd.h +++ b/glabels/FrameCd.h @@ -30,6 +30,8 @@ namespace glabels class FrameCd : public Frame { + Q_DECLARE_TR_FUNCTIONS(FrameCd) + public: FrameCd( const Distance& r1, const Distance& r2, diff --git a/glabels/FrameEllipse.h b/glabels/FrameEllipse.h index 1bdbb20..e2b7e40 100644 --- a/glabels/FrameEllipse.h +++ b/glabels/FrameEllipse.h @@ -30,6 +30,7 @@ namespace glabels class FrameEllipse : public Frame { + Q_DECLARE_TR_FUNCTIONS(FrameEllipse) public: FrameEllipse( const Distance& w, diff --git a/glabels/FrameRect.h b/glabels/FrameRect.h index e7ecad3..9a149d1 100644 --- a/glabels/FrameRect.h +++ b/glabels/FrameRect.h @@ -30,6 +30,8 @@ namespace glabels class FrameRect : public Frame { + Q_DECLARE_TR_FUNCTIONS(FrameRect) + public: FrameRect( const Distance& w, const Distance& h, diff --git a/glabels/FrameRound.h b/glabels/FrameRound.h index 7048032..38ff557 100644 --- a/glabels/FrameRound.h +++ b/glabels/FrameRound.h @@ -30,6 +30,7 @@ namespace glabels class FrameRound : public Frame { + Q_DECLARE_TR_FUNCTIONS(FrameRound) public: FrameRound( const Distance& r, diff --git a/glabels/XmlUtil.cpp b/glabels/XmlUtil.cpp index a8387be..b2339da 100644 --- a/glabels/XmlUtil.cpp +++ b/glabels/XmlUtil.cpp @@ -22,6 +22,7 @@ #include +#include #include @@ -192,7 +193,6 @@ namespace glabels { init(); - // TODO: are translations done in a compatable way, so that we can use "_name" attributes? QString i18nString = node.attribute( QString("_").append(name), "" ); if ( i18nString == "" ) @@ -200,7 +200,7 @@ namespace glabels return node.attribute( name, default_value ); } - return i18nString; + return QCoreApplication::translate( "XmlStrings", i18nString.toUtf8().constData() ); } diff --git a/glabels/glabels_main.cpp b/glabels/glabels_main.cpp index ae24c74..c443df6 100644 --- a/glabels/glabels_main.cpp +++ b/glabels/glabels_main.cpp @@ -20,7 +20,11 @@ #include +#include +#include +#include +#include "FileUtil.h" #include "Db.h" #include "MainWindow.h" #include "Settings.h" @@ -36,19 +40,39 @@ int main( int argc, char **argv ) QCoreApplication::setOrganizationDomain( "glabels.org" ); QCoreApplication::setApplicationName( "glabels-qt" ); + // + // Setup translators + // + QLocale locale = QLocale::system(); + QString translationsDir = glabels::FileUtil::translationsDir().canonicalPath(); + + QTranslator glabelsTranslator; + if ( glabelsTranslator.load( locale, "glabels", "_", translationsDir ) ) + { + app.installTranslator(&glabelsTranslator); + } + + QTranslator templatesTranslator; + if ( templatesTranslator.load( locale, "templates", "_", translationsDir ) ) + { + app.installTranslator(&templatesTranslator); + } + + + // + // Initialize subsystems + // glabels::Settings::init(); glabels::Db::init(); glabels::merge::Factory::init(); - ////// TEMPORARY TESTING //////// -#if 0 - glabels::Db::printKnownPapers(); - glabels::Db::printKnownCategories(); - glabels::Db::printKnownVendors(); - glabels::Db::printKnownTemplates(); -#endif - ///////////////////////////////// + /// @TODO open file(s) from command line if present, otherwise start wizard + + + // + // Launch main window + // glabels::MainWindow mainWindow; mainWindow.show(); diff --git a/templates/CMakeLists.txt b/templates/CMakeLists.txt index a569223..a9e2daa 100644 --- a/templates/CMakeLists.txt +++ b/templates/CMakeLists.txt @@ -49,6 +49,10 @@ set (other_db_files vendors.xml ) +# Export variables to parent scope +set (template_files ${template_files} PARENT_SCOPE) +set (other_db_files ${other_db_files} PARENT_SCOPE) + #======================================= # Install #======================================= diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt new file mode 100644 index 0000000..95d181d --- /dev/null +++ b/translations/CMakeLists.txt @@ -0,0 +1,97 @@ +#======================================= +# Translation files +#======================================= +# without this a "make clean" would delete the .ts files +set_directory_properties (PROPERTIES CLEAN_NO_CUSTOM 1) + +# +# gLabels Translation Files +# +set (glabels_ts_files + glabels_C.ts +) + +# +# Template Translation Files +# +set (templates_ts_files + templates_C.ts +) + +qt5_create_translation (glabels_qm_files + ${CMAKE_SOURCE_DIR}/glabels ${glabels_ts_files} +) + +qt5_create_translation (templates_qm_files + ${CMAKE_CURRENT_BINARY_DIR}/template-strings.h ${templates_ts_files} + OPTIONS -locations none +) + +add_custom_target (update_translations DEPENDS ${glabels_qm_files} ${templates_qm_files}) + +# Add updating translations as a dependency for glabels-qt +add_dependencies (glabels-qt update_translations) + + +#======================================= +# Compilation +#======================================= +add_compile_options (-std=c++11 -g) +if (NOT WIN32) + add_compile_options (-fPIC) +endif () + + +#======================================= +# XmlStrings utility +#======================================= +set (XmlStrings_sources + XmlStrings.cpp +) + +add_executable (XmlStrings WIN32 + ${XmlStrings_sources} +) + +target_link_libraries (XmlStrings + ${Qt5Xml_LIBRARIES} + ${Qt5Svg_LIBRARIES} +) + +include_directories ( + ${Qt5Xml_INCLUDE_DIRS} + ${Qt5Svg_INCLUDE_DIRS} +) + + +#======================================= +# Extract translatable strings from XML +# template files. +#======================================= +# Use absolute locations of XML files +string (REGEX REPLACE "([^;]+)" "${CMAKE_SOURCE_DIR}/templates/\\1" + xml_files "${template_files};${other_db_files}" +) + +add_custom_command ( + OUTPUT template-strings.h + COMMAND XmlStrings ${xml_files} > template-strings.h + COMMENT "Extracting template strings." + DEPENDS XmlStrings ${xml_files} +) + +set_source_files_properties (template-strings.h PROPERTIES GENERATED TRUE) + +add_custom_target (template-strings DEPENDS template-strings.h) + + +#======================================= +# Subdirectories +#======================================= + + +#======================================= +# Install +#======================================= +install (FILES ${glabels_qm_files} DESTINATION share/glabels-qt/translations) +install (FILES ${templates_qm_files} DESTINATION share/glabels-qt/translations) diff --git a/translations/XmlStrings.cpp b/translations/XmlStrings.cpp new file mode 100644 index 0000000..964b561 --- /dev/null +++ b/translations/XmlStrings.cpp @@ -0,0 +1,108 @@ +/* XmlStrings.cpp + * + * Copyright (C) 2013-2016 Jim Evins + * + * This file is part of gLabels-qt. + * + * gLabels-qt is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * gLabels-qt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with gLabels-qt. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace +{ + QStringList stringList; +} + + +void parseElement( const QDomElement& node ) +{ + // Examine each attribute for translatable strings + QDomNamedNodeMap attrNodes = node.attributes(); + for ( int i = 0; i < attrNodes.count(); i++ ) + { + QDomAttr attr = attrNodes.item(i).toAttr(); + if ( attr.name().at(0) == '_' ) + { + if ( !stringList.contains( attr.value() ) ) + { + stringList.append( attr.value() ); + } + } + } + + // Recurse over children + for ( QDomNode child = node.firstChild(); !child.isNull(); child = child.nextSibling() ) + { + parseElement( child.toElement() ); + } +} + + +void parseFile( const QString& filename ) +{ + QFile file( filename ); + + if ( file.open( QFile::ReadOnly|QFile::Text ) ) + { + QDomDocument doc; + + if ( doc.setContent( &file, false ) ) + { + QDomElement root = doc.documentElement(); + + parseElement( root ); + } + } +} + + +int main( int argc, char *argv[] ) +{ + QCoreApplication app( argc, argv ); + + QStringList filenameList = app.arguments(); + filenameList.removeFirst(); // Remove 0th argument, which is the command name + + foreach ( QString filename, filenameList ) + { + parseFile( filename ); + } + + stringList.sort(); + + QTextStream out( stdout ); + + out << "// Automatically generated with " << app.arguments().at(0) << endl; + out << "//" << endl; + out << "// Sources:" << endl; + foreach ( QString filename, filenameList ) + { + out << "// " << filename << endl; + } + out << "//" << endl; + + foreach ( QString string, stringList ) + { + out << "QT_TRANSLATE_NOOP( \"XmlStrings\", \"" << string << "\" );" << endl; + } +} diff --git a/translations/glabels_C.ts b/translations/glabels_C.ts new file mode 100644 index 0000000..1900dad --- /dev/null +++ b/translations/glabels_C.ts @@ -0,0 +1,1974 @@ + + + + + AboutDialog + + + About gLabels + + + + + &License + + + + + &Website + + + + + &Close + + + + + Db + + + Other + + + + + Factory + + + + None + + + + + Text: Comma Separated Values (CSV) + + + + + Text: Comma Separated Values (CSV), keys on line 1 + + + + + Text: Tab Separated Values (TSV) + + + + + Text: Tab Separated Values (TSV), keys on line 1 + + + + + Text: Colon Separated Values + + + + + Text: Colon Separated Values, keys on line 1 + + + + + Text: Semicolon Separated Values + + + + + Text: Semicolon Separated Values, keys on line 1 + + + + + Frame + + + %1 x %2 (%3 per sheet) + + + + + %1 per sheet + + + + + FrameCd + + + + diameter + + + + + FrameRound + + + + diameter + + + + + MergeView + + + Form + + + + + Source + + + + + Location + + + + + Format: + + + + + Location: + + + + + Records + + + + + Select all + + + + + Unselect all + + + + + ObjectEditor + + + Form + + + + + Text + + + + + Layout + + + + + Alignment: + + + + + Line spacing: + + + + + Font + + + + + Family: + + + + + Size: + + + + + Style: + + + + + + + + + Color: + + + + + Editor + + + + + Barcode + + + + + Style + + + + + Type: + + + + + Show text + + + + + Checksum + + + + + Data + + + + + Literal: + + + + + Key: + + + + + format: + + + + + 0000000000 + + + + + digits: + + + + + Image + + + + + File + + + + + None + + + + + Select File... + + + + + or + + + + + Select Merge Field... + + + + + Line/Fill + + + + + Line + + + + + + Width: + + + + + Fill + + + + + Position/Size + + + + + Position + + + + + X: + + + + + Y: + + + + + + Size + + + + + Length: + + + + + Angle: + + + + + Original size: + + + + + Reset + + + + + Lock aspect ratio + + + + + Height: + + + + + + Shadow + + + + + X offset: + + + + + Y offset: + + + + + Opacity: + + + + + Object properties + + + + + PreferencesDialog + + + gLabels - Preferences + + + + + Locale + + + + + Select locale specific behavior. + + + + + Units + + + + + Points + + + + + Centimeters + + + + + Millimeters + + + + + Inches + + + + + Picas + + + + + PrintView + + + Form + + + + + Page + + + + + of + + + + + nn + + + + + Copies + + + + + Copies: + + + + + Start on position: + + + + + on 1st page + + + + + Print options + + + + + print outlines + + + + + print crop marks + + + + + print in reverse (i.e. a mirror image) + + + + + Print + + + + + PropertiesView + + + Form + + + + + Product + + + + + Vendor: + + + + + + + + + + TextLabel + + + + + Part #: + + + + + Description: + + + + + Page size: + + + + + Label size: + + + + + Layout: + + + + + <html><head/><body><p>Select another product for this gLabels project.</p></body></html> + + + + + Change product + + + + + Orientation + + + + + Select horizontal or vertical orientation. + + + + + Horizontal orientation + + + + + Vertical orientation + + + + + Similar Products + + + + + SelectProductDialog + + + gLabels - Select Product + + + + + Search all + + + + + Search + + + + + Filter by paper size + + + + + ISO sizes + + + + + US sizes + + + + + Other + + + + + Filter by category + + + + + All + + + + + Selected + + + + + Search entire product database. + + + + + Recent + + + + + Select from recently used products. + + + + + &Cancel + + + + + StartupView + + + Form + + + + + Welcome to gLabels. Let's get started: + + + + + New Project + + + + + Create a new blank gLabels project + + + + + Open Project + + + + + Open an existing gLabels project + + + + + Units + + + points + + + + + inches + + + + + mm + + + + + cm + + + + + picas + + + + + glabels::AboutDialog + + + Version + + + + + A program to create labels and business cards. + + + + + gLabels is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + + + + gLabels is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + + + + glabels::BarcodeBackends + + + POSTNET (any) + + + + + POSTNET-5 (ZIP only) + + + + + POSTNET-9 (ZIP+4) + + + + + POSTNET-11 (DPBC) + + + + + CEPNET + + + + + USPS Intelligent Mail + + + + + Code 39 + + + + + Code 39 Extended + + + + + UPC-A + + + + + EAN-13 + + + + + DataMatrix + + + + + QRCode + + + + + glabels::ColorPaletteDialog + + + Light Scarlet Red + Color name + + + + + Light Orange + Color name + + + + + Light Butter + Color name + + + + + Light Chameleon + Color name + + + + + Light Sky Blue + Color name + + + + + Light Plum + Color name + + + + + Light Chocolate + Color name + + + + + Light Aluminum 1 + Color name + + + + + Light Aluminum 2 + Color name + + + + + Scarlet Red + Color name + + + + + Orange + Color name + + + + + Butter + Color name + + + + + Chameleon + Color name + + + + + Sky Blue + Color name + + + + + Plum + Color name + + + + + Chocolate + Color name + + + + + Aluminum 1 + Color name + + + + + Aluminum 2 + Color name + + + + + Dark Scarlet Red + Color name + + + + + Dark Orange + Color name + + + + + Dark Butter + Color name + + + + + Dark Chameleon + Color name + + + + + Dark Sky Blue + Color name + + + + + Dark Plum + Color name + + + + + Dark Chocolate + Color name + + + + + Dark Aluminum 1 + Color name + + + + + Dark Aluminum 2 + Color name + + + + + Black + Color name + + + + + Very Dark Gray + Color name + + + + + Darker Gray + Color name + + + + + Dark Gray + Color name + + + + + Medium Gray + Color name + + + + + Light Gray + Color name + + + + + Lighter Gray + Color name + + + + + Very Light Gray + Color name + + + + + White + Color name + + + + + Custom color... + + + + + Merge key... + + + + + Custom Color + + + + + Custom color #%1 + + + + + glabels::File + + + gLabels - Open Project + + + + + + glabels files (*.glabels);;All files (*) + + + + + Unable to open " + + + + + ". + + + + + gLabels - Save Project As + + + + + Save Label As + + + + + %1 already exists. + + + + + Do you want to replace it? + + + + + glabels::LabelEditor + + + + + + + Move + + + + + Delete + + + + + glabels::LabelModel + + + Untitled + + + + + glabels::LabelModelTextObject + + + + Text + + + + + glabels::MainWindow + + + Welcome + + + + + Home + + + + + Properties + + + + + Merge + + + + + Print + + + + + &New... + + + + + Create a new gLabels project + + + + + &Open... + + + + + Open an existing gLabels project + + + + + &Save + + + + + Save current gLabels project + + + + + Save &As... + + + + + Save current gLabels project to a different name + + + + + Template &Designer... + + + + + Create custom templates + + + + + &Close + + + + + Close the current window + + + + + E&xit + + + + + Exit glabels + + + + + + Undo + + + + + + Redo + + + + + + + Cut + + + + + + Cut the selection + + + + + + &Copy + + + + + + Copy the selection + + + + + + &Paste + + + + + + Paste the clipboard + + + + + + &Delete + + + + + + Delete the selected objects + + + + + Select &All + + + + + Select all objects + + + + + Un-select All + + + + + Remove all selections + + + + + Preferences + + + + + Configure the application + + + + + File + + + + + Change visibility of file toolbar in current window + + + + + Editor + + + + + Change visibility of editor toolbar in current window + + + + + Grid + + + + + Change visibility of the grid in current window + + + + + Markup + + + + + Change visibility of markup lines in current window + + + + + Zoom &In + + + + + Increase magnification + + + + + Zoom &Out + + + + + Decrease magnification + + + + + Zoom &1 to 1 + + + + + Restore scale to 100% + + + + + Zoom to &Fit + + + + + Set scale to fit window + + + + + Select Mode + + + + + Select, move and modify objects + + + + + Text + + + + + Create text object + + + + + Box + + + + + Create box object + + + + + Line + + + + + Create line object + + + + + Ellipse + + + + + Create ellipse/circle object + + + + + Image + + + + + Create image object + + + + + Barcode + + + + + Create barcode object + + + + + + Bring To Front + + + + + Raise selection to top + + + + + + Send To Back + + + + + Lower selection to bottom + + + + + + Rotate Left + + + + + Rotate object(s) 90 degrees counter-clockwise + + + + + + Rotate Right + + + + + Rotate object(s) 90 degrees clockwise + + + + + + Flip Horizontally + + + + + Flip object(s) horizontally + + + + + + Flip Vertically + + + + + Flip object(s) vertically + + + + + + Align Left + + + + + Align objects to left edges + + + + + + Align Center + + + + + Align objects to horizontal centers + + + + + + Align Right + + + + + Align objects to right edges + + + + + + Align Top + + + + + Align objects to top edges + + + + + + Align Middle + + + + + Align objects to vertical centers + + + + + + Align Bottom + + + + + Align objects to bottom edges + + + + + + Center Horizontally + + + + + Horizontally center objects in label + + + + + + Center Vertically + + + + + Vertically center objects in label + + + + + &Contents... + + + + + Open gLabels manual + + + + + &About... + + + + + About gLabels + + + + + + &File + + + + + &Edit + + + + + &View + + + + + Toolbars + + + + + &Objects + + + + + &Create + + + + + + &Order + + + + + + &Rotate/Flip + + + + + + &Alignment + + + + + + Center + + + + + &Help + + + + + &Editor + + + + + (modified) + + + + + Save changes to project "%1" before closing? + + + + + Your changes will be lost if you don't save them. + + + + + Save project? + + + + + Paste + + + + + Delete + + + + + Create Text + + + + + Create Box + + + + + Create Line + + + + + Create Ellipse + + + + + Create Image + + + + + glabels::MergeView + + + Merge + + + + + Select merge file + + + + + All files (*) + + + + + glabels::ObjectEditor + + + Original size + + + + + Box object properties + + + + + Ellipse object properties + + + + + Image object properties + + + + + Line object properties + + + + + Text object properties + + + + + Line + + + + + Fill + + + + + Image files (*.png *.jpg *.jpeg *.gif *.bmp *.pbm *.pgm *.ppm *.xbm *.xpm *.svg) + + + + + All files (*) + + + + + PNG - Portable Network Graphics (*.png) + + + + + BMP - Windows Bitmap (*.bmp) + + + + + GIF - Graphics Interchange Format (*.gif) + + + + + JPEG - Joint Photographic Experts Group (*.jpg *.jpeg) + + + + + PBM - Portable Bitmap (*.pbm) + + + + + PGM - Portable Graymap (*.pgm) + + + + + PPM - Portable Pixmap (*.ppm) + + + + + SVG - Scalable Vector Graphics (*.svg) + + + + + XBM - X11 Bitmap (*.xbm) + + + + + XPM - X11 Pixmap (*.xpm) + + + + + gLabels - Select image file + + + + + + Set image + + + + + Move + + + + + + Size + + + + + Text + + + + + Shadow + + + + + glabels::PrintView + + + Print + + + + + (Will print a total of %1 items on %2 pages.) + + + + + glabels::PropertiesView + + + Properties + + + + + Product Rotate + + + + + Change Product + + + + + glabels::SimplePreview + + + Up + + + + diff --git a/translations/templates_C.ts b/translations/templates_C.ts new file mode 100644 index 0000000..429e30b --- /dev/null +++ b/translations/templates_C.ts @@ -0,0 +1,1063 @@ + + + + + XmlStrings + + #10 Envelope + + + + A0 + + + + A1 + + + + A10 + + + + A2 + + + + A3 + + + + A4 + + + + A5 + + + + A6 + + + + A7 + + + + A8 + + + + A9 + + + + Address Labels + + + + Address Labels (STAMPIT) + + + + Address labels + + + + Address labels, barcode labels, candy labels + + + + Allround Labels + + + + Allround labels + + + + Amazon FBA shipping labels + + + + Any card + + + + Any label + + + + Arch File Labels + + + + Arch File Labels (large) + + + + Arch File Labels (small) + + + + Arch File inserts + + + + Arch File labels + + + + B0 + + + + B1 + + + + B10 + + + + B2 + + + + B3 + + + + B4 + + + + B5 + + + + B6 + + + + B7 + + + + B8 + + + + B9 + + + + Barcode labels + + + + Beer bottle label, jar label + + + + Beer bottle labels, jar labels, nutritional labels, soap labels + + + + Bookplate labels, coffee and tea labels + + + + Bottle labels + + + + Business Card CD + + + + Business Cards + + + + Business card CD Labels + + + + Business card CD labels + + + + Business card size labels + + + + Business cards + + + + Business cards glossy, both sides printable + + + + Business cards high glossy + + + + Business cards punched + + + + Business cards punched dull + + + + Business cards punched glossy + + + + C5 + + + + C6 + + + + CD Booklet + + + + CD Inlet + + + + CD Labels + + + + CD Template Rectangles + + + + CD case labels + + + + CD inlet + + + + CD inlet (back) + + + + CD inlet (front) + + + + CD/DVD Inlet + + + + CD/DVD Labels + + + + CD/DVD Labels (Disc Labels) + + + + CD/DVD Labels (Face Only) + + + + CD/DVD Labels (Spine Labels) + + + + CD/DVD Labels (face only) + + + + CD/DVD Labels Standard Format (face only) + + + + CD/DVD Tray + + + + CD/DVD center hub labels + + + + CD/DVD labels + + + + CD/DVD or other media + + + + Candle labels, lip balm labels + + + + Candy labels + + + + Cassette Labels + + + + Cassette Tape Face + + + + Classification labels, library book labels + + + + Coffee and tea labels + + + + Correction and Cover-up Labels + + + + DL + + + + DLT Labels + + + + DVD inlet + + + + Digital media labels + + + + Digital video labels + + + + Diskette Labels + + + + Diskette Labels (face only) + + + + Diskette labels + + + + Divider Labels + + + + EPSON Photo Stickers 16 + + + + Elliptical labels + + + + Etiketten + + + + File Folder + + + + File Folder Labels + + + + File folder labels + + + + File labels, return address labels, medical chart labels + + + + Filing Labels + + + + Filing labels + + + + Floppy disk labels + + + + Flyer paper + + + + Foldable business cards + + + + Foldable business cards glossy/dull + + + + Foldable cards + + + + Fridge Magnet Stickers + + + + Full Sheet Labels + + + + Full face CD/DVD labels + + + + Full sheet labels + + + + Full sheet labels with back slit + + + + General Labels + + + + Greeting cards + + + + Hanging Folder + + + + Hershey's® chocolate labels + + + + ID Labels + + + + Identification Labels + + + + Index Cards + + + + Inkjet/Laser Labels 70x37mm + + + + Jar labels + + + + Jar labels, Coffee and tea labels + + + + Jar labels, candle labels + + + + Jar labels, candle labels, lip balm labels + + + + Jar labels, candle labels, metal tin container labels + + + + Jar labels, candle labels, nutritional labels + + + + Jar labels, candy labels, nutritional labels + + + + Jar labels, coffee and tea labels, nutritional labels + + + + Jar labels, nutritional labels + + + + Jar labels, nutritional labels, pot labels, soap labels + + + + Jar labels, nutritional labels, soap labels, candle labels, coffee and tea labels + + + + Jar labels, pot labels, candle labels + + + + Jar labels, pot labels, coffee and tea labels + + + + Jar labels, pot labels, nutritional labels + + + + Jar labels, water bottle labels + + + + Jar labels, water bottle labels, wine bottle labels + + + + Jewel Case Booklet + + + + Labels + + + + Labels A3 + + + + Labels A4 + + + + Labels A5 + + + + Labels A6 + + + + Labels SRA3 + + + + Large Address Labels + + + + Large Round Labels + + + + Lever Arch File Labels + + + + Lip balm labels + + + + Lip balm tube labels + + + + Liquor bottle labels + + + + Mail Order Manager labels + + + + Mailing Labels + + + + Mailing labels + + + + Mailing/shipping products + + + + Medical chart labels + + + + Medical chart labels, barcode labels + + + + Membership cards + + + + Membership cards, both sides printable + + + + Metal tin container labels + + + + Metal tin container labels, nutritional labels + + + + Microtube labels + + + + Mini Address Labels + + + + Mini CD Labels + + + + Mini CD labels + + + + Mini Disc labels + + + + Mini Labels + + + + Mini-CD Labels + + + + Monarch Envelope + + + + Multi Purpose Labels 17mm x 54mm + + + + Multi Purpose Labels 17mm x 54mm (Old) + + + + Multi-Purpose Labels + + + + Multi-purpose Stick+Lift Labels + + + + Multipurpose Labels + + + + Name Badge + + + + Name Badge Labels + + + + Name Badges + + + + Name plates + + + + Nutritional labels + + + + Nutritional labels, soap labels, coffee and tea labels, candle labels + + + + Oval bottle labels + + + + PRO CD Labels 2-up (CD spine only) + + + + PRO CD Labels 2-up (Face only) + + + + PRO CD Labels 2-up (face only) + + + + PVC labels + + + + Paper hole reinforcement labels + + + + Passport photo labels + + + + Passport photo labels glossy + + + + PayPal® label + + + + Photo labels + + + + Photo labels semiglossy + + + + Photo products + + + + Post cards + + + + Pot labels, barcode labels + + + + Pot labels, coffee and tea labels + + + + Printable mousepad + + + + QSL-Karten Etiketten 70mm x 50,8mm + + + + RA0 + + + + RA1 + + + + RA2 + + + + RA3 + + + + RA4 + + + + Rectangular Copier Labels + + + + Rectangular Labels + + + + Rectangular labels + + + + Return Address Labels + + + + Return address labels + + + + Reverse addendum stickers + + + + Reverse automobile window stickers + + + + Round Labels + + + + Round and rectangular labels + + + + Round labels + + + + Rounded rectangular labels + + + + SD Card labels, library book labels, classification labels + + + + SD card labels + + + + SRA0 + + + + SRA1 + + + + SRA2 + + + + SRA3 + + + + SRA4 + + + + Seal labels + + + + Self-Adhesive Name Badges (Acetate Silk) + + + + Self-adhesive film transparent + + + + Self-adhesive film weatherproof + + + + Self-adhesive labels + + + + Self-adhesive window film + + + + Shipping Address Labels + + + + Shipping Labels + + + + Shipping Labels 62mm x 100mm + + + + Shipping Labels 62mm x 100mm (Old) + + + + Shipping labels + + + + Slimline CD Case (rightside up) + + + + Slimline CD Case (upside down) + + + + Small Round Labels + + + + Square Labels + + + + Square labels + + + + Standard Address Labels 29mm x 90mm + + + + Standard Address Labels 29mm x 90mm (Old) + + + + Standard Address Labels 38mm x 90mm + + + + Standard Address Labels 38mm x 90mm (Old) + + + + Standard Labels + + + + Target stickers + + + + Tent Cards + + + + Trapezoid labels + + + + Triangular labels + + + + US Executive + + + + US Legal + + + + US Letter + + + + USPS® shipping labels + + + + Universal Labels + + + + VHS face labels, nutritional labels + + + + VHS inlet + + + + VHS labels, jar labels, book labels + + + + VHS-C inlet + + + + VICS labels + + + + Video Labels (back) + + + + Video Labels (face only) + + + + Video Tape Face Labels + + + + Video Tape Spine Labels + + + + Video-8 inlet + + + + Water bottle labels + + + + Water bottle labels, jar labels, candle labels + + + + Water bottle labels, shipping labels + + + + Wine bottle labels + + + + Wine bottle labels, nutritional labels + + + + Wine bottle labels, shipping labels, UPS® WorldShip® labels + + + + Zip disc inlet + + + + Zip disc labels + + + + eBay® shipping labels + + + +