Add spanish translation

This commit is contained in:
Mauricio Baeza 2019-10-15 17:33:56 -05:00
commit 4a2ea7fad4
16 changed files with 4533 additions and 438 deletions

View File

@ -1,3 +1,9 @@
v 0.3.0 [15-oct-2019]
---------------------
- Add menus in start application.
- Update easymacro.py
v 0.2.0 [27-sep-2019]
---------------------
- Update easymacro.py

View File

@ -1,2 +1,2 @@
0.2.0
0.3.0

28
conf.py
View File

@ -26,7 +26,7 @@ import logging
TYPE_EXTENSION = 1
# ~ https://semver.org/
VERSION = '0.2.0'
VERSION = '0.3.0'
# ~ Your great extension name, not used spaces
NAME = 'ZAZFavorites'
@ -184,7 +184,6 @@ FILES = {
'update': f'{NAME.lower()}.update.xml',
'addin': 'CalcAddIn.xcu',
'shortcut': 'Accelerators.xcu',
'jobs': 'Jobs.xcu',
'easymacro': True,
}
@ -206,6 +205,7 @@ PATHS = {
'regmerge': '/usr/lib/libreoffice/program/regmerge',
'soffice': ('soffice', PROGRAM, FILE_TEST),
'install': ('unopkg', 'add', '-v', '-f', '-s'),
'profile': '/home/mau/.config/libreoffice/4/user',
}
@ -428,21 +428,6 @@ FILE_ADDONS = f"""<?xml version='1.0' encoding='UTF-8'?>
"""
NODE_ADDONS = '\n <manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>'
if TYPE_EXTENSION > 1:
NODE_ADDONS = f'\n <manifest:file-entry manifest:full-path="{FILES["rdb"]}" manifest:media-type="application/vnd.sun.star.uno-typelibrary;type=RDB"/>'
if TYPE_EXTENSION == 3:
NODE_ADDONS += '\n <manifest:file-entry manifest:full-path="CalcAddIn.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>'
FILE_MANIFEST = f"""<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<manifest:file-entry manifest:full-path="{FILES['py']}" manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/>
<manifest:file-entry manifest:full-path="Office/{FILES['shortcut']}" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<manifest:file-entry manifest:full-path="Office/{FILES['jobs']}" manifest:media-type="application/vnd.sun.star.configuration-data"/>{NODE_ADDONS}
</manifest:manifest>
"""
FILE_UPDATE = ''
if URL_XML_UPDATE:
FILE_UPDATE = f"""<?xml version="1.0" encoding="UTF-8"?>
@ -627,9 +612,16 @@ FILE_SHORTCUTS = f"""<?xml version="1.0" encoding="UTF-8"?>
"""
DATA_MANIFEST = [FILES['py'], f"Office/{FILES['shortcut']}", 'Addons.xcu']
if TYPE_EXTENSION > 1:
DATA_MANIFEST.append(FILES['rdb'])
if TYPE_EXTENSION == 3:
DATA_MANIFEST.append('CalcAddIn.xcu')
DATA = {
'py': FILE_PY,
'manifest': FILE_MANIFEST,
'manifest': DATA_MANIFEST,
'description': FILE_DESCRIPTION,
'addons': FILE_ADDONS,
'update': FILE_UPDATE,

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data
oor:name="Jobs"
oor:package="org.openoffice.Office"
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<node oor:name="Jobs">
<node oor:name="Favorites" oor:op="replace">
<prop oor:name="Service" oor:type="xs:string">
<value>service:net.elmau.zaz.Favorites</value>
</prop>
<node oor:name="Arguments">
<prop oor:name="first" oor:type="xs:string" oor:op="replace">
<value>first</value>
</prop>
</node>
</node>
</node>
<node oor:name="Events">
<node oor:name="onFirstVisibleTask" oor:op="fuse">
<node oor:name="JobList">
<node oor:name="Favorites" oor:op="replace"/>
</node>
</node>
</node>
</oor:component-data>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<manifest:file-entry manifest:full-path="ZAZFavorites.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/>
<manifest:file-entry manifest:full-path="Office/Accelerators.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<manifest:file-entry manifest:full-path="Office/Jobs.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest:manifest manifest:version="1.2" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
<manifest:file-entry manifest:full-path="ZAZFavorites.py" manifest:media-type="application/vnd.sun.star.uno-component;type=Python"/>
<manifest:file-entry manifest:full-path="Office/Accelerators.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
</manifest:manifest>

View File

@ -44,7 +44,7 @@ class Controllers(object):
return
def button_save_action(self, event):
msg = _('¿You want save your favorites?')
msg = _('¿Want you save your favorites?')
if not app.question(msg, self.TITLE):
return
@ -70,9 +70,8 @@ class Controllers(object):
'After': '.uno:RecentFileList',
'Submenu': submenus,
}
doc = app.get_document()
for doc_type in ('calc', 'writer'):
for doc_type in ('main', 'calc', 'writer'):
app.remove_menu(doc_type, 'File', command)
app.insert_menu(doc_type, 'File', **data)
app.set_config('paths', paths)
@ -88,7 +87,7 @@ class Controllers(object):
if col != 1:
return
msg = _('¿You want delete this file?')
msg = _('¿Want you delete this file?')
if app.question(msg, self.TITLE):
path = self.d.grid[2, row]
self.paths.remove(path)

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:d="http://openoffice.org/extensions/description/2006">
<identifier value="net.elmau.zaz.Favorites" />
<version value="0.2.0" />
<version value="0.3.0" />
<display-name>
<name lang="en">Favorites files</name>
<name lang="es">Archivos favoritos</name>

View File

@ -20,7 +20,7 @@ msgid "Path previously added"
msgstr ""
#: source/ZAZFavorites.py:47
msgid "¿You want save your favorites?"
msgid "¿Want you save your favorites?"
msgstr ""
#: source/ZAZFavorites.py:63
@ -32,7 +32,7 @@ msgid "Favorites saved correctly"
msgstr ""
#: source/ZAZFavorites.py:91
msgid "¿You want delete this file?"
msgid "¿Want you delete this file?"
msgstr ""
#: source/ZAZFavorites.py:111

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-09-19 21:06-0500\n"
"PO-Revision-Date: 2019-09-19 21:07-0500\n"
"PO-Revision-Date: 2019-10-15 17:30-0500\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -22,7 +22,7 @@ msgid "Path previously added"
msgstr ""
#: source/ZAZFavorites.py:47
msgid "¿You want save your favorites?"
msgid "¿Want you save your favorites?"
msgstr ""
#: source/ZAZFavorites.py:63
@ -34,7 +34,7 @@ msgid "Favorites saved correctly"
msgstr ""
#: source/ZAZFavorites.py:91
msgid "¿You want delete this file?"
msgid "¿Want you delete this file?"
msgstr ""
#: source/ZAZFavorites.py:111

Binary file not shown.

View File

@ -0,0 +1,54 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-09-19 21:06-0500\n"
"PO-Revision-Date: 2019-10-15 17:32-0500\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 2.2.1\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
#: source/ZAZFavorites.py:35
msgid "Path previously added"
msgstr "Ruta previamente agregada"
#: source/ZAZFavorites.py:47
msgid "¿Want you save your favorites?"
msgstr "¿Quiere guardar sus favoritos?"
#: source/ZAZFavorites.py:63
msgid "Favorites..."
msgstr "Favoritos..."
#: source/ZAZFavorites.py:81
msgid "Favorites saved correctly"
msgstr "Favoritos guardados correctamente"
#: source/ZAZFavorites.py:91
msgid "¿Want you delete this file?"
msgstr "¿Quiere borrar esta ruta?"
#: source/ZAZFavorites.py:111
msgid "ZAZ Favorites"
msgstr "ZAZ Favoritos"
#: source/ZAZFavorites.py:144
msgid "~Add"
msgstr "~Agregar"
#: source/ZAZFavorites.py:155
msgid "File Name"
msgstr "Nombre de archivo"
#: source/ZAZFavorites.py:179
msgid "~Save"
msgstr "~Guardar"

File diff suppressed because it is too large Load Diff

185
zaz.py
View File

@ -19,11 +19,16 @@
import argparse
import os
import re
import sys
import zipfile
from datetime import datetime
from pathlib import Path
from shutil import copyfile
from subprocess import call
import zipfile
from xml.etree import ElementTree as ET
from xml.dom.minidom import parseString
from conf import (
DATA,
@ -37,6 +42,84 @@ from conf import (
log)
class LiboXML(object):
TYPES = {
'py': 'application/vnd.sun.star.uno-component;type=Python',
'zip': 'application/binary',
'xcu': 'application/vnd.sun.star.configuration-data',
'rdb': 'application/vnd.sun.star.uno-typelibrary;type=RDB',
'xcs': 'application/vnd.sun.star.configuration-schema',
'help': 'application/vnd.sun.star.help',
'component': 'application/vnd.sun.star.uno-components',
}
NAME_SPACES = {
'manifest_version': '1.2',
'manifest': 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0',
'xmlns:loext': 'urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0',
}
def __init__(self):
self._manifest = None
self._paths = []
def _save_path(self, attr):
self._paths.append(attr['{{{}}}full-path'.format(self.NAME_SPACES['manifest'])])
return
def _clean(self, name, nodes):
has_words = re.compile('\\w')
if not re.search(has_words, str(nodes.tail)):
nodes.tail = ''
if not re.search(has_words, str(nodes.text)):
nodes.text = ''
for node in nodes:
if name == 'manifest':
self._save_path(node.attrib)
if not re.search(has_words, str(node.tail)):
node.tail = ''
if not re.search(has_words, str(node.text)):
node.text = ''
return
def new_manifest(self, data):
attr = {
'manifest:version': self.NAME_SPACES['manifest_version'],
'xmlns:manifest': self.NAME_SPACES['manifest'],
'xmlns:loext': self.NAME_SPACES['xmlns:loext'],
}
self._manifest = ET.Element('manifest:manifest', attr)
return self.add_data_manifest(data)
def parse_manifest(self, data):
ET.register_namespace('manifest', self.NAME_SPACES['manifest'])
self._manifest = ET.fromstring(data)
data = {'xmlns:loext': self.NAME_SPACES['xmlns:loext']}
self._manifest.attrib.update(**data)
self._clean('manifest', self._manifest)
return
def add_data_manifest(self, data):
node_name = 'manifest:file-entry'
attr = {
'manifest:full-path': '',
'manifest:media-type': '',
}
for path in data:
if path in self._paths:
continue
ext = path.split('.')[-1]
attr['manifest:full-path'] = path
attr['manifest:media-type'] = self.TYPES.get(ext, '')
ET.SubElement(self._manifest, node_name, attr)
return self._get_xml(self._manifest)
def _get_xml(self, doc):
xml = parseString(ET.tostring(doc, encoding='utf-8'))
return xml.toprettyxml(indent=' ', encoding='utf-8').decode('utf-8')
def _exists(path):
return os.path.exists(path)
@ -222,8 +305,11 @@ def _update_files():
target = _join(path_source, 'pythonpath', source)
copyfile(source, target)
xml = LiboXML()
path = _join(path_source, DIRS['meta'], FILES['manifest'])
_save(path, DATA['manifest'])
data = xml.new_manifest(DATA['manifest'])
_save(path, data)
path = _join(path_source, DIRS['office'])
_mkdir(path)
@ -265,7 +351,96 @@ def _new():
return
def _get_info_path(path):
path, filename = os.path.split(path)
name, extension = os.path.splitext(filename)
return (path, filename, name, extension)
def _zip_embed(source, files):
PATH = 'Scripts/python/'
EASYMACRO = 'easymacro.'
p, f, name, e = _get_info_path(source)
now = datetime.now().strftime('_%Y%m%d_%H%M%S')
path_source = _join(p, name + now + e)
copyfile(source, path_source)
target = source
with zipfile.PyZipFile(EASYMACRO + 'zip', mode='w') as zf:
zf.writepy(EASYMACRO + 'py')
xml = LiboXML()
path_easymacro = PATH + EASYMACRO + 'zip'
names = [f[1] for f in files] + [path_easymacro]
nodes = []
with zipfile.ZipFile(target, 'w', compression=zipfile.ZIP_DEFLATED) as zt:
with zipfile.ZipFile(path_source, compression=zipfile.ZIP_DEFLATED) as zs:
for name in zs.namelist():
if FILES['manifest'] in name:
path_manifest = name
xml_manifest = zs.open(name).read()
elif name in names:
continue
else:
zt.writestr(name, zs.open(name).read())
data = []
for path, name in files:
data.append(name)
zt.write(path, name)
zt.write(EASYMACRO + 'zip', path_easymacro)
data.append(path_easymacro)
xml.parse_manifest(xml_manifest)
xml_manifest = xml.add_data_manifest(data)
zt.writestr(path_manifest, xml_manifest)
os.unlink(EASYMACRO + 'zip')
return
def _embed(args):
PATH = 'Scripts/python'
PYTHONPATH = 'pythonpath'
doc = args.document
if not doc:
msg = '-d/--document Path file to embed is mandatory'
log.error(msg)
return
if not _exists(doc):
msg = 'Path file not exists'
log.error(msg)
return
files = []
if args.files:
files = args.files.split(',')
source = _join(PATHS['profile'], PATH)
content = os.listdir(source)
if PYTHONPATH in content:
content.remove(PYTHONPATH)
if files:
files = [(_join(source, f), _join(PATH, f)) for f in files if f in content]
else:
files = [(_join(source, f), _join(PATH, f)) for f in content]
_zip_embed(doc, files)
log.info('Embedded macros successfully...')
return
def main(args):
if args.embed:
_embed(args)
return
if args.new:
_new()
return
@ -279,7 +454,7 @@ def main(args):
if args.install:
_install_and_test()
log.info('Extension make sucesfully...')
log.info('Extension make successfully...')
return
@ -290,6 +465,10 @@ def _process_command_line_arguments():
default=False, required=False)
parser.add_argument('-n', '--new', dest='new', action='store_true',
default=False, required=False)
parser.add_argument('-e', '--embed', dest='embed', action='store_true',
default=False, required=False)
parser.add_argument('-d', '--document', dest='document', default='')
parser.add_argument('-f', '--files', dest='files', default='')
return parser.parse_args()