mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make PRS 500 driver thread safe. Fixes #4307 (PRS-500 not recognized in 0.6.30)
This commit is contained in:
commit
d7c24b9896
@ -39,6 +39,7 @@ from tempfile import TemporaryFile
|
|||||||
from array import array
|
from array import array
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
from threading import RLock
|
||||||
|
|
||||||
from calibre.devices.interface import DevicePlugin
|
from calibre.devices.interface import DevicePlugin
|
||||||
from calibre.devices.libusb import Error as USBError
|
from calibre.devices.libusb import Error as USBError
|
||||||
@ -52,6 +53,7 @@ from calibre.devices.usbms.deviceconfig import DeviceConfig
|
|||||||
# Protocol versions this driver has been tested with
|
# Protocol versions this driver has been tested with
|
||||||
KNOWN_USB_PROTOCOL_VERSIONS = [0x3030303030303130L]
|
KNOWN_USB_PROTOCOL_VERSIONS = [0x3030303030303130L]
|
||||||
|
|
||||||
|
lock = RLock()
|
||||||
|
|
||||||
class File(object):
|
class File(object):
|
||||||
"""
|
"""
|
||||||
@ -161,36 +163,39 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
"""
|
"""
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def run_session(*args, **kwargs):
|
def run_session(*args, **kwargs):
|
||||||
dev = args[0]
|
with lock:
|
||||||
res = None
|
dev = args[0]
|
||||||
try:
|
res = None
|
||||||
if not dev.handle:
|
try:
|
||||||
dev.open()
|
if not hasattr(dev, 'in_session'):
|
||||||
if not getattr(dev, 'in_session', False):
|
dev.reset()
|
||||||
dev.send_validated_command(BeginEndSession(end=False))
|
if not dev.handle:
|
||||||
dev.in_session = True
|
dev.open()
|
||||||
res = func(*args, **kwargs)
|
if not getattr(dev, 'in_session', False):
|
||||||
except ArgumentError:
|
dev.send_validated_command(BeginEndSession(end=False))
|
||||||
|
dev.in_session = True
|
||||||
|
res = func(*args, **kwargs)
|
||||||
|
except ArgumentError:
|
||||||
|
if not kwargs.has_key("end_session") or kwargs["end_session"]:
|
||||||
|
dev.send_validated_command(BeginEndSession(end=True))
|
||||||
|
dev.in_session = False
|
||||||
|
raise
|
||||||
|
except USBError, err:
|
||||||
|
if "No such device" in str(err):
|
||||||
|
raise DeviceError()
|
||||||
|
elif "Connection timed out" in str(err):
|
||||||
|
dev.close()
|
||||||
|
raise TimeoutError(func.__name__)
|
||||||
|
elif "Protocol error" in str(err):
|
||||||
|
dev.close()
|
||||||
|
raise ProtocolError("There was an unknown error in the"+\
|
||||||
|
" protocol. Contact " + __author__)
|
||||||
|
dev.close()
|
||||||
|
raise
|
||||||
if not kwargs.has_key("end_session") or kwargs["end_session"]:
|
if not kwargs.has_key("end_session") or kwargs["end_session"]:
|
||||||
dev.send_validated_command(BeginEndSession(end=True))
|
dev.send_validated_command(BeginEndSession(end=True))
|
||||||
dev.in_session = False
|
dev.in_session = False
|
||||||
raise
|
return res
|
||||||
except USBError, err:
|
|
||||||
if "No such device" in str(err):
|
|
||||||
raise DeviceError()
|
|
||||||
elif "Connection timed out" in str(err):
|
|
||||||
dev.close()
|
|
||||||
raise TimeoutError(func.__name__)
|
|
||||||
elif "Protocol error" in str(err):
|
|
||||||
dev.close()
|
|
||||||
raise ProtocolError("There was an unknown error in the"+\
|
|
||||||
" protocol. Contact " + __author__)
|
|
||||||
dev.close()
|
|
||||||
raise
|
|
||||||
if not kwargs.has_key("end_session") or kwargs["end_session"]:
|
|
||||||
dev.send_validated_command(BeginEndSession(end=True))
|
|
||||||
dev.in_session = False
|
|
||||||
return res
|
|
||||||
|
|
||||||
return run_session
|
return run_session
|
||||||
|
|
||||||
@ -204,17 +209,18 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
If it is called with -1 that means that the
|
If it is called with -1 that means that the
|
||||||
task does not have any progress information
|
task does not have any progress information
|
||||||
"""
|
"""
|
||||||
self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID)
|
with lock:
|
||||||
# Handle that is used to communicate with device. Setup in L{open}
|
self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID)
|
||||||
self.handle = None
|
# Handle that is used to communicate with device. Setup in L{open}
|
||||||
self.in_session = False
|
self.handle = None
|
||||||
self.log_packets = log_packets
|
self.in_session = False
|
||||||
self.report_progress = report_progress
|
self.log_packets = log_packets
|
||||||
if len(key) > 8:
|
self.report_progress = report_progress
|
||||||
key = key[:8]
|
if len(key) > 8:
|
||||||
elif len(key) < 8:
|
key = key[:8]
|
||||||
key += ''.join(['\0' for i in xrange(8 - len(key))])
|
elif len(key) < 8:
|
||||||
self.key = key
|
key += ''.join(['\0' for i in xrange(8 - len(key))])
|
||||||
|
self.key = key
|
||||||
|
|
||||||
def reconnect(self):
|
def reconnect(self):
|
||||||
""" Only recreates the device node and deleted the connection handle """
|
""" Only recreates the device node and deleted the connection handle """
|
||||||
@ -244,64 +250,66 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
Also initialize the device.
|
Also initialize the device.
|
||||||
See the source code for the sequence of initialization commands.
|
See the source code for the sequence of initialization commands.
|
||||||
"""
|
"""
|
||||||
if not hasattr(self, 'key'):
|
with lock:
|
||||||
self.key = '-1\0\0\0\0\0\0'
|
if not hasattr(self, 'key'):
|
||||||
self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID)
|
self.reset()
|
||||||
if not self.device:
|
self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID)
|
||||||
raise DeviceError()
|
if not self.device:
|
||||||
configs = self.device.configurations
|
raise DeviceError()
|
||||||
try:
|
configs = self.device.configurations
|
||||||
self.handle = self.device.open()
|
|
||||||
config = configs[0]
|
|
||||||
try:
|
try:
|
||||||
self.handle.set_configuration(configs[0])
|
self.handle = self.device.open()
|
||||||
except USBError:
|
config = configs[0]
|
||||||
self.handle.set_configuration(configs[1])
|
try:
|
||||||
config = configs[1]
|
self.handle.set_configuration(configs[0])
|
||||||
_id = config.interface.contents.altsetting.contents
|
except USBError:
|
||||||
ed1 = _id.endpoint[0]
|
self.handle.set_configuration(configs[1])
|
||||||
ed2 = _id.endpoint[1]
|
config = configs[1]
|
||||||
if ed1.EndpointAddress == self.BULK_IN_EP:
|
_id = config.interface.contents.altsetting.contents
|
||||||
red, wed = ed1, ed2
|
ed1 = _id.endpoint[0]
|
||||||
else:
|
ed2 = _id.endpoint[1]
|
||||||
red, wed = ed2, ed1
|
if ed1.EndpointAddress == self.BULK_IN_EP:
|
||||||
self.bulk_read_max_packet_size = red.MaxPacketSize
|
red, wed = ed1, ed2
|
||||||
self.bulk_write_max_packet_size = wed.MaxPacketSize
|
else:
|
||||||
self.handle.claim_interface(self.INTERFACE_ID)
|
red, wed = ed2, ed1
|
||||||
except USBError, err:
|
self.bulk_read_max_packet_size = red.MaxPacketSize
|
||||||
raise DeviceBusy(str(err))
|
self.bulk_write_max_packet_size = wed.MaxPacketSize
|
||||||
# Large timeout as device may still be initializing
|
self.handle.claim_interface(self.INTERFACE_ID)
|
||||||
res = self.send_validated_command(GetUSBProtocolVersion(), timeout=20000)
|
except USBError, err:
|
||||||
if res.code != 0:
|
raise DeviceBusy(str(err))
|
||||||
raise ProtocolError("Unable to get USB Protocol version.")
|
# Large timeout as device may still be initializing
|
||||||
version = self._bulk_read(24, data_type=USBProtocolVersion)[0].version
|
res = self.send_validated_command(GetUSBProtocolVersion(), timeout=20000)
|
||||||
if version not in KNOWN_USB_PROTOCOL_VERSIONS:
|
if res.code != 0:
|
||||||
print >> sys.stderr, "WARNING: Usb protocol version " + \
|
raise ProtocolError("Unable to get USB Protocol version.")
|
||||||
hex(version) + " is unknown"
|
version = self._bulk_read(24, data_type=USBProtocolVersion)[0].version
|
||||||
res = self.send_validated_command(SetBulkSize(\
|
if version not in KNOWN_USB_PROTOCOL_VERSIONS:
|
||||||
chunk_size = 512*self.bulk_read_max_packet_size, \
|
print >> sys.stderr, "WARNING: Usb protocol version " + \
|
||||||
unknown = 2))
|
hex(version) + " is unknown"
|
||||||
if res.code != 0:
|
res = self.send_validated_command(SetBulkSize(\
|
||||||
raise ProtocolError("Unable to set bulk size.")
|
chunk_size = 512*self.bulk_read_max_packet_size, \
|
||||||
res = self.send_validated_command(UnlockDevice(key=self.key))#0x312d))
|
unknown = 2))
|
||||||
if res.code != 0:
|
if res.code != 0:
|
||||||
raise DeviceLocked()
|
raise ProtocolError("Unable to set bulk size.")
|
||||||
res = self.send_validated_command(SetTime())
|
res = self.send_validated_command(UnlockDevice(key=self.key))#0x312d))
|
||||||
if res.code != 0:
|
if res.code != 0:
|
||||||
raise ProtocolError("Could not set time on device")
|
raise DeviceLocked()
|
||||||
|
res = self.send_validated_command(SetTime())
|
||||||
|
if res.code != 0:
|
||||||
|
raise ProtocolError("Could not set time on device")
|
||||||
|
|
||||||
def eject(self):
|
def eject(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
""" Release device interface """
|
""" Release device interface """
|
||||||
try:
|
with lock:
|
||||||
self.handle.reset()
|
try:
|
||||||
self.handle.release_interface(self.INTERFACE_ID)
|
self.handle.reset()
|
||||||
except Exception, err:
|
self.handle.release_interface(self.INTERFACE_ID)
|
||||||
print >> sys.stderr, err
|
except Exception, err:
|
||||||
self.handle, self.device = None, None
|
print >> sys.stderr, err
|
||||||
self.in_session = False
|
self.handle, self.device = None, None
|
||||||
|
self.in_session = False
|
||||||
|
|
||||||
def _send_command(self, command, response_type=Response, timeout=1000):
|
def _send_command(self, command, response_type=Response, timeout=1000):
|
||||||
"""
|
"""
|
||||||
@ -313,17 +321,18 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
@param timeout: The time to wait for a response from the
|
@param timeout: The time to wait for a response from the
|
||||||
device, in milliseconds. If there is no response, a L{usb.USBError} is raised.
|
device, in milliseconds. If there is no response, a L{usb.USBError} is raised.
|
||||||
"""
|
"""
|
||||||
if self.log_packets:
|
with lock:
|
||||||
self.log_packet(command, "Command")
|
if self.log_packets:
|
||||||
bytes_sent = self.handle.control_msg(0x40, 0x80, command)
|
self.log_packet(command, "Command")
|
||||||
if bytes_sent != len(command):
|
bytes_sent = self.handle.control_msg(0x40, 0x80, command)
|
||||||
raise ControlError(desc="Could not send control request to device\n"\
|
if bytes_sent != len(command):
|
||||||
+ str(command))
|
raise ControlError(desc="Could not send control request to device\n"\
|
||||||
response = response_type(self.handle.control_msg(0xc0, 0x81, \
|
+ str(command))
|
||||||
Response.SIZE, timeout=timeout))
|
response = response_type(self.handle.control_msg(0xc0, 0x81, \
|
||||||
if self.log_packets:
|
Response.SIZE, timeout=timeout))
|
||||||
self.log_packet(response, "Response")
|
if self.log_packets:
|
||||||
return response
|
self.log_packet(response, "Response")
|
||||||
|
return response
|
||||||
|
|
||||||
def send_validated_command(self, command, cnumber=None, \
|
def send_validated_command(self, command, cnumber=None, \
|
||||||
response_type=Response, timeout=1000):
|
response_type=Response, timeout=1000):
|
||||||
@ -347,42 +356,43 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
@param packet_size: Size of packets to be sent to device.
|
@param packet_size: Size of packets to be sent to device.
|
||||||
C{data} is broken up into packets to be sent to device.
|
C{data} is broken up into packets to be sent to device.
|
||||||
"""
|
"""
|
||||||
def bulk_write_packet(packet):
|
with lock:
|
||||||
self.handle.bulk_write(self.BULK_OUT_EP, packet)
|
def bulk_write_packet(packet):
|
||||||
if self.log_packets:
|
self.handle.bulk_write(self.BULK_OUT_EP, packet)
|
||||||
self.log_packet(Answer(packet), "Answer h->d")
|
if self.log_packets:
|
||||||
|
self.log_packet(Answer(packet), "Answer h->d")
|
||||||
|
|
||||||
bytes_left = len(data)
|
bytes_left = len(data)
|
||||||
if bytes_left + 16 <= packet_size:
|
if bytes_left + 16 <= packet_size:
|
||||||
packet_size = bytes_left +16
|
packet_size = bytes_left +16
|
||||||
first_packet = Answer(bytes_left+16)
|
first_packet = Answer(bytes_left+16)
|
||||||
first_packet[16:] = data
|
first_packet[16:] = data
|
||||||
first_packet.length = len(data)
|
first_packet.length = len(data)
|
||||||
else:
|
else:
|
||||||
first_packet = Answer(packet_size)
|
first_packet = Answer(packet_size)
|
||||||
first_packet[16:] = data[0:packet_size-16]
|
first_packet[16:] = data[0:packet_size-16]
|
||||||
first_packet.length = packet_size-16
|
first_packet.length = packet_size-16
|
||||||
first_packet.number = 0x10005
|
first_packet.number = 0x10005
|
||||||
bulk_write_packet(first_packet)
|
bulk_write_packet(first_packet)
|
||||||
pos = first_packet.length
|
pos = first_packet.length
|
||||||
bytes_left -= first_packet.length
|
bytes_left -= first_packet.length
|
||||||
while bytes_left > 0:
|
while bytes_left > 0:
|
||||||
endpos = pos + packet_size if pos + packet_size <= len(data) \
|
endpos = pos + packet_size if pos + packet_size <= len(data) \
|
||||||
else len(data)
|
else len(data)
|
||||||
bulk_write_packet(data[pos:endpos])
|
bulk_write_packet(data[pos:endpos])
|
||||||
bytes_left -= endpos - pos
|
bytes_left -= endpos - pos
|
||||||
pos = endpos
|
pos = endpos
|
||||||
res = Response(self.handle.control_msg(0xc0, 0x81, Response.SIZE, \
|
res = Response(self.handle.control_msg(0xc0, 0x81, Response.SIZE, \
|
||||||
timeout=5000))
|
timeout=5000))
|
||||||
if self.log_packets:
|
if self.log_packets:
|
||||||
self.log_packet(res, "Response")
|
self.log_packet(res, "Response")
|
||||||
if res.rnumber != 0x10005 or res.code != 0:
|
if res.rnumber != 0x10005 or res.code != 0:
|
||||||
raise ProtocolError("Sending via Bulk Transfer failed with response:\n"\
|
raise ProtocolError("Sending via Bulk Transfer failed with response:\n"\
|
||||||
+str(res))
|
+str(res))
|
||||||
if res.data_size != len(data):
|
if res.data_size != len(data):
|
||||||
raise ProtocolError("Unable to transfer all data to device. "+\
|
raise ProtocolError("Unable to transfer all data to device. "+\
|
||||||
"Response packet:\n"\
|
"Response packet:\n"\
|
||||||
+str(res))
|
+str(res))
|
||||||
|
|
||||||
|
|
||||||
def _bulk_read(self, bytes, command_number=0x00, packet_size=0x1000, \
|
def _bulk_read(self, bytes, command_number=0x00, packet_size=0x1000, \
|
||||||
@ -395,31 +405,32 @@ class PRS500(DeviceConfig, DevicePlugin):
|
|||||||
@return: A list of packets read from the device.
|
@return: A list of packets read from the device.
|
||||||
Each packet is of type data_type
|
Each packet is of type data_type
|
||||||
"""
|
"""
|
||||||
msize = self.bulk_read_max_packet_size
|
with lock:
|
||||||
def bulk_read_packet(data_type=Answer, size=0x1000):
|
msize = self.bulk_read_max_packet_size
|
||||||
rsize = size
|
def bulk_read_packet(data_type=Answer, size=0x1000):
|
||||||
if size % msize:
|
rsize = size
|
||||||
rsize = size - size % msize + msize
|
if size % msize:
|
||||||
data = data_type(self.handle.bulk_read(self.BULK_IN_EP, rsize))
|
rsize = size - size % msize + msize
|
||||||
if self.log_packets:
|
data = data_type(self.handle.bulk_read(self.BULK_IN_EP, rsize))
|
||||||
self.log_packet(data, "Answer d->h")
|
if self.log_packets:
|
||||||
if len(data) != size:
|
self.log_packet(data, "Answer d->h")
|
||||||
raise ProtocolError("Unable to read " + str(size) + " bytes from "\
|
if len(data) != size:
|
||||||
"device. Read: " + str(len(data)) + " bytes")
|
raise ProtocolError("Unable to read " + str(size) + " bytes from "\
|
||||||
return data
|
"device. Read: " + str(len(data)) + " bytes")
|
||||||
|
return data
|
||||||
|
|
||||||
bytes_left = bytes
|
bytes_left = bytes
|
||||||
packets = []
|
packets = []
|
||||||
while bytes_left > 0:
|
while bytes_left > 0:
|
||||||
if packet_size > bytes_left:
|
if packet_size > bytes_left:
|
||||||
packet_size = bytes_left
|
packet_size = bytes_left
|
||||||
packet = bulk_read_packet(data_type=data_type, size=packet_size)
|
packet = bulk_read_packet(data_type=data_type, size=packet_size)
|
||||||
bytes_left -= len(packet)
|
bytes_left -= len(packet)
|
||||||
packets.append(packet)
|
packets.append(packet)
|
||||||
self.send_validated_command(\
|
self.send_validated_command(\
|
||||||
AcknowledgeBulkRead(packets[0].number), \
|
AcknowledgeBulkRead(packets[0].number), \
|
||||||
cnumber=command_number)
|
cnumber=command_number)
|
||||||
return packets
|
return packets
|
||||||
|
|
||||||
@safe
|
@safe
|
||||||
def get_device_information(self, end_session=True):
|
def get_device_information(self, end_session=True):
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2009-12-25 04:54+0000\n"
|
"POT-Creation-Date: 2009-12-26 16:57+0000\n"
|
||||||
"PO-Revision-Date: 2009-12-25 19:11+0000\n"
|
"PO-Revision-Date: 2009-12-26 16:45+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Arabic <ar@li.org>\n"
|
"Language-Team: Arabic <ar@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2009-12-26 04:31+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-27 04:31+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -64,8 +64,8 @@ msgstr "لا يفعل شيءً"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:593
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:594
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:783
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:784
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
||||||
@ -132,7 +132,7 @@ msgstr "لا يفعل شيءً"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -7361,10 +7361,18 @@ msgid "English (TH)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
msgid "Dutch (NL)"
|
msgid "English (CY)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "German (AT)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: de\n"
|
"Project-Id-Version: de\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2009-12-25 04:54+0000\n"
|
"POT-Creation-Date: 2009-12-26 16:57+0000\n"
|
||||||
"PO-Revision-Date: 2009-12-25 21:08+0000\n"
|
"PO-Revision-Date: 2009-12-26 20:24+0000\n"
|
||||||
"Last-Translator: S. Dorscht <Unknown>\n"
|
"Last-Translator: S. Dorscht <Unknown>\n"
|
||||||
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2009-12-26 04:32+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-27 04:31+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
@ -65,8 +65,8 @@ msgstr "Macht absolut gar nichts"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:593
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:594
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:783
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:784
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
||||||
@ -133,7 +133,7 @@ msgstr "Macht absolut gar nichts"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -8227,10 +8227,18 @@ msgid "English (TH)"
|
|||||||
msgstr "Englisch (TH)"
|
msgstr "Englisch (TH)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "English (CY)"
|
||||||
|
msgstr "Englisch (CY)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "German (AT)"
|
||||||
|
msgstr "Deutsch (AT)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
msgid "Dutch (NL)"
|
msgid "Dutch (NL)"
|
||||||
msgstr "Holländisch (NL)"
|
msgstr "Holländisch (NL)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr "Holländisch (BE)"
|
msgstr "Holländisch (BE)"
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: es\n"
|
"Project-Id-Version: es\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2009-12-25 04:54+0000\n"
|
"POT-Creation-Date: 2009-12-26 16:57+0000\n"
|
||||||
"PO-Revision-Date: 2009-12-26 01:25+0000\n"
|
"PO-Revision-Date: 2009-12-26 16:48+0000\n"
|
||||||
"Last-Translator: mosteo <alejandro@mosteo.com>\n"
|
"Last-Translator: mosteo <alejandro@mosteo.com>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2009-12-26 04:33+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-27 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -67,8 +67,8 @@ msgstr "No hacer nada en absoluto"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:593
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:594
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:783
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:784
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
||||||
@ -135,7 +135,7 @@ msgstr "No hacer nada en absoluto"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -8181,10 +8181,18 @@ msgid "English (TH)"
|
|||||||
msgstr "Inglés (TH)"
|
msgstr "Inglés (TH)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "English (CY)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "German (AT)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
msgid "Dutch (NL)"
|
msgid "Dutch (NL)"
|
||||||
msgstr "Neerlandés (NL)"
|
msgstr "Neerlandés (NL)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr "Neerlandés (BE)"
|
msgstr "Neerlandés (BE)"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2009-12-25 04:54+0000\n"
|
"POT-Creation-Date: 2009-12-26 16:57+0000\n"
|
||||||
"PO-Revision-Date: 2009-12-25 19:14+0000\n"
|
"PO-Revision-Date: 2009-12-26 16:50+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Latvian <ivars_a@inbox.lv>\n"
|
"Language-Team: Latvian <ivars_a@inbox.lv>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2009-12-26 04:32+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-27 04:31+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"X-Poedit-Country: LATVIA\n"
|
"X-Poedit-Country: LATVIA\n"
|
||||||
"X-Poedit-Language: Latvian\n"
|
"X-Poedit-Language: Latvian\n"
|
||||||
@ -66,8 +66,8 @@ msgstr "Pilnīgi neko nedara"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:593
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:594
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:783
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:784
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
||||||
@ -134,7 +134,7 @@ msgstr "Pilnīgi neko nedara"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -7354,10 +7354,18 @@ msgid "English (TH)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
msgid "Dutch (NL)"
|
msgid "English (CY)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "German (AT)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -6,14 +6,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.4.55\n"
|
"Project-Id-Version: calibre 0.4.55\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2009-12-25 04:54+0000\n"
|
"POT-Creation-Date: 2009-12-26 16:57+0000\n"
|
||||||
"PO-Revision-Date: 2009-12-25 19:27+0000\n"
|
"PO-Revision-Date: 2009-12-26 16:54+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2009-12-26 04:32+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-27 04:31+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
||||||
"X-Poedit-Language: Russian\n"
|
"X-Poedit-Language: Russian\n"
|
||||||
@ -68,8 +68,8 @@ msgstr "Ничего не делает"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:593
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:594
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:783
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:784
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896
|
||||||
@ -136,7 +136,7 @@ msgstr "Ничего не делает"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -7760,10 +7760,18 @@ msgid "English (TH)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
msgid "Dutch (NL)"
|
msgid "English (CY)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "German (AT)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
7541
src/calibre/translations/sq.po
Normal file
7541
src/calibre/translations/sq.po
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user