translation support added

This commit is contained in:
guinux 2013-03-31 19:31:33 +02:00
parent 3a3e9b14a5
commit 84865bcd9f
19 changed files with 846 additions and 201 deletions

3
create_pot_file.sh Executable file
View File

@ -0,0 +1,3 @@
#! /bin/sh
xgettext --from-code=UTF-8 --files-from=./files_to_translate --keyword=translatable --keyword=_ --output=pamac.pot

View File

@ -4,10 +4,11 @@
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
<vendor>Manjaro</vendor>
<icon_name>pamac</icon_name>
<vendor_url>http://manjaro.org/</vendor_url>
<icon_name>package-x-generic</icon_name>
<action id="org.manjaro.pamac.commit">
<message>Authentication is required to change alpm database</message>
<message xml:lang="fr">L'authentification est nécessaire pour changer la base de données alpm</message>
<message>Authentication is required</message>
<message xml:lang="fr">Authentification nécessaire</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>

6
files_to_translate Normal file
View File

@ -0,0 +1,6 @@
./pamac-daemon.py
./pamac-tray.py
./pamac/main.py
./pamac/common.py
./gui/manager.glade
./gui/updater.glade

View File

@ -677,7 +677,7 @@
<object class="GtkTreeViewColumn" id="installed_column">
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Installed</property>
<property name="title" translatable="yes">State</property>
<property name="clickable">True</property>
<property name="sort_indicator">True</property>
<property name="sort_column_id">1</property>

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8-*-
# -*- coding:utf-8 -*-
import dbus
import dbus.service
@ -11,6 +11,12 @@ import pyalpm
from multiprocessing import Process
from pamac import config, common
# i18n
import gettext
gettext.bindtextdomain('pamac', '/usr/share/locale')
gettext.textdomain('pamac')
_ = gettext.gettext
class PamacDBusService(dbus.service.Object):
def __init__(self):
bus=dbus.SystemBus()
@ -21,7 +27,7 @@ class PamacDBusService(dbus.service.Object):
self.error = ''
self.warning = ''
self.previous_action = ''
self.action = 'Preparing...'
self.action = _('Preparing')+'...'
self.previous_icon = ''
self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
self.previous_target = ''
@ -60,48 +66,48 @@ class PamacDBusService(dbus.service.Object):
def cb_event(self, ID, event, tupel):
if ID is 1:
self.action = 'Checking dependencies...'
self.action = _('Checking dependencies')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
elif ID is 3:
self.action = 'Checking file conflicts...'
self.action = _('Checking file conflicts')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
elif ID is 5:
self.action = 'Resolving dependencies...'
self.action = _('Resolving dependencies')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
elif ID is 7:
self.action = 'Checking inter conflicts...'
self.action = _('Checking inter conflicts')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
elif ID is 9:
self.action = 'Installing...'
self.action = _('Installing')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-add.png'
elif ID is 10:
formatted_event = 'Installed {} ({})'.format(tupel[0].name, tupel[0].version)
formatted_event = 'Installed {pkgname} ({pkgversion})'.format(pkgname = tupel[0].name, pkgversion = tupel[0].version)
common.write_log_file(formatted_event)
print(formatted_event)
elif ID is 11:
self.action = 'Removing...'
self.action = _('Removing')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-delete.png'
elif ID is 12:
formatted_event = 'Removed {} ({})'.format(tupel[0].name, tupel[0].version)
formatted_event = 'Removed {pkgname} ({pkgversion})'.format(pkgname = tupel[0].name, pkgversion = tupel[0].version)
common.write_log_file(formatted_event)
print(formatted_event)
elif ID is 13:
self.action = 'Upgrading...'
self.action = _('Upgrading')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-update.png'
elif ID is 14:
formatted_event = 'Upgraded {} ({} -> {})'.format(tupel[1].name, tupel[1].version, tupel[0].version)
formatted_event = 'Upgraded {pkgname} ({oldversion} -> {newversion})'.format(pkgname = tupel[1].name, oldversion = tupel[1].version, newversion = tupel[0].version)
common.write_log_file(formatted_event)
print(formatted_event)
elif ID is 15:
self.action = 'Checking integrity...'
self.action = _('Checking integrity')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
self.already_transferred = 0
elif ID is 17:
self.action = 'Loading packages files...'
self.action = _('Loading packages files')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/package-search.png'
print('Loading packages files')
elif ID is 26:
self.action = 'Configuring...'
self.action = _('Configuring')+'...'
self.icon = '/usr/share/pamac/icons/24x24/status/setup.png'
self.EmitPercent(str(2))
print('Configuring a package')
@ -153,12 +159,12 @@ class PamacDBusService(dbus.service.Object):
size = pkg.size
if _transferred == size:
self.already_transferred += size
self.action = 'Downloading '+common.format_size(self.total_size)
self.action = _('Downloading {size}'.format(size = common.format_size(self.total_size)))
self.target = _target
self.percent = round(fraction, 2)
self.icon = '/usr/share/pamac/icons/24x24/status/package-download.png'
else:
self.action = 'Refreshing...'
self.action = _('Refreshing')+'...'
self.target = _target
self.percent = 2
self.icon = '/usr/share/pamac/icons/24x24/status/refresh-cache.png'
@ -261,7 +267,7 @@ class PamacDBusService(dbus.service.Object):
finally:
return self.error
else :
return 'You are not authorized'
return _('Authentication failed')
@dbus.service.method('org.manjaro.pamac', '', 's')
def Sysupgrade(self):
@ -365,11 +371,11 @@ class PamacDBusService(dbus.service.Object):
if self.error:
self.EmitTransactionError(self.error)
else:
self.EmitTransactionDone('Transaction successfully finished')
self.EmitTransactionDone(_('Transaction successfully finished'))
try:
authorized = self.policykit_test(sender,connexion,'org.manjaro.pamac.commit')
except dbus.exceptions.DBusException as e:
self.EmitTransactionError('You are not authorized')
self.EmitTransactionError(_('Authentication failed'))
success('')
else:
if authorized:
@ -377,7 +383,7 @@ class PamacDBusService(dbus.service.Object):
self.task.start()
else :
self.t.release()
self.EmitTransactionError('You are not authorized')
self.EmitTransactionError(_('Authentication failed'))
success('')
@dbus.service.signal('org.manjaro.pamac')
@ -399,7 +405,7 @@ class PamacDBusService(dbus.service.Object):
finally:
return self.error
else :
return 'You are not authorized'
return _('Authentication failed')
@dbus.service.method('org.manjaro.pamac')
def StopDaemon(self):

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8 -*-
# -*- coding:utf-8 -*-
from gi.repository import GObject
from sys import argv

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8 -*-
# -*- coding:utf-8 -*-
from pamac import main

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8-*-
# -*- coding:utf-8 -*-
from gi.repository import GObject
from pamac import common, transaction

View File

@ -1,21 +1,28 @@
#! /usr/bin/python
# -*-coding:utf-8-*-
# -*- coding:utf-8 -*-
from gi.repository import Gtk, GObject
from subprocess import Popen
from pamac import transaction
from pamac import transaction, common
import dbus
import threading
# i18n
import gettext
gettext.bindtextdomain('pamac', '/usr/share/locale')
gettext.textdomain('pamac')
_ = gettext.gettext
GObject.threads_init()
bus = dbus.SystemBus()
icon = ''
info = ''
update_icon = '/usr/share/pamac/icons/scalable/status/update-normal.svg'
update_info = '{} available updates'
update_info = _('{number} available updates')
one_update_info = _('1 available update')
noupdate_icon = '/usr/share/pamac/icons/scalable/status/update-enhancement.svg'
noupdate_info = ' No available update'
noupdate_info = _('Your system is up-to-date')
class Tray:
def __init__(self):
@ -23,13 +30,13 @@ class Tray:
self.statusIcon.set_visible(True)
self.menu = Gtk.Menu()
self.menuItem = Gtk.ImageMenuItem('Install/Check for updates')
self.menuItem = Gtk.ImageMenuItem(_('Install/Check for updates'))
self.menuItem.connect('activate', self.execute_update, self.statusIcon)
self.menu.append(self.menuItem)
self.menuItem = Gtk.ImageMenuItem('Run pamac-manager')
self.menuItem = Gtk.ImageMenuItem(_('Run pamac-manager'))
self.menuItem.connect('activate', self.execute_manager, self.statusIcon)
self.menu.append(self.menuItem)
self.menuItem = Gtk.ImageMenuItem('Quit')
self.menuItem = Gtk.ImageMenuItem(_('Quit'))
self.menuItem.connect('activate', self.quit_tray, self.statusIcon)
self.menu.append(self.menuItem)
@ -90,7 +97,10 @@ def set_icon(updates):
global info
if updates:
icon = update_icon
info = update_info.format(updates)
if int(updates) == 1:
info = one_update_info
else:
info = update_info.format(number = updates)
Popen(['notify-send', '-i', icon, '-u', 'normal', 'Pamac', info])
else:
icon = noupdate_icon

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8 -*-
# -*- coding:utf-8 -*-
from pamac import main

339
pamac.pot Normal file
View File

@ -0,0 +1,339 @@
## Translation of Pamac.
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the Pamac package.
# Guillaume Benoit <guillaume@manjaro.org>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: pamac\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-31 18:55+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: pamac-daemon.py:30 pamac/main.py:594
msgid "Preparing"
msgstr ""
#: pamac-daemon.py:69
msgid "Checking dependencies"
msgstr ""
#: pamac-daemon.py:72
msgid "Checking file conflicts"
msgstr ""
#: pamac-daemon.py:75
msgid "Resolving dependencies"
msgstr ""
#: pamac-daemon.py:78
msgid "Checking inter conflicts"
msgstr ""
#: pamac-daemon.py:81 pamac/main.py:73
msgid "Installing"
msgstr ""
#: pamac-daemon.py:88 pamac/main.py:73
msgid "Removing"
msgstr ""
#: pamac-daemon.py:95 pamac/main.py:73
msgid "Upgrading"
msgstr ""
#: pamac-daemon.py:102
msgid "Checking integrity"
msgstr ""
#: pamac-daemon.py:106
msgid "Loading packages files"
msgstr ""
#: pamac-daemon.py:110 pamac/main.py:73
msgid "Configuring"
msgstr ""
#: pamac-daemon.py:162
msgid "Downloading {size}"
msgstr ""
#: pamac-daemon.py:167 pamac/main.py:504
msgid "Refreshing"
msgstr ""
#: pamac-daemon.py:270 pamac-daemon.py:378 pamac-daemon.py:386
#: pamac-daemon.py:408
msgid "Authentication failed"
msgstr ""
#: pamac-daemon.py:374
msgid "Transaction successfully finished"
msgstr ""
#: pamac-tray.py:22
msgid "{number} available updates"
msgstr ""
#: pamac-tray.py:23
msgid "1 available update"
msgstr ""
#: pamac-tray.py:25
msgid "Your system is up-to-date"
msgstr ""
#: pamac-tray.py:33
msgid "Install/Check for updates"
msgstr ""
#: pamac-tray.py:36
msgid "Run pamac-manager"
msgstr ""
#: pamac-tray.py:39
msgid "Quit"
msgstr ""
#: pamac/main.py:110 pamac/main.py:923
msgid "Installed"
msgstr ""
#: pamac/main.py:110 pamac/main.py:925
msgid "Uninstalled"
msgstr ""
#: pamac/main.py:110 pamac/main.py:927
msgid "Orphans"
msgstr ""
#: pamac/main.py:110 pamac/main.py:428 pamac/main.py:929
msgid "To install"
msgstr ""
#: pamac/main.py:110 pamac/main.py:408 pamac/main.py:931
msgid "To remove"
msgstr ""
#: pamac/main.py:129 pamac/main.py:939
msgid "local"
msgstr ""
#: pamac/main.py:295
msgid "No package found"
msgstr ""
#: pamac/main.py:346
msgid "Licenses"
msgstr ""
#: pamac/main.py:351
msgid "Depends On"
msgstr ""
#: pamac/main.py:353
msgid "Optional Deps"
msgstr ""
#: pamac/main.py:356
msgid "Required By"
msgstr ""
#: pamac/main.py:358
msgid "Provides"
msgstr ""
#: pamac/main.py:360
msgid "Replaces"
msgstr ""
#: pamac/main.py:362
msgid "Conflicts With"
msgstr ""
#: pamac/main.py:367
msgid "Repository"
msgstr ""
#: pamac/main.py:369 gui/manager.glade:539
msgid "Groups"
msgstr ""
#: pamac/main.py:371
msgid "Compressed Size"
msgstr ""
#: pamac/main.py:372
msgid "Download Size"
msgstr ""
#: pamac/main.py:374
msgid "Installed Size"
msgstr ""
#: pamac/main.py:375
msgid "Packager"
msgstr ""
#: pamac/main.py:379
msgid "Install Date"
msgstr ""
#: pamac/main.py:381
msgid "Explicitly installed"
msgstr ""
#: pamac/main.py:383
msgid "Installed as a dependency for another package"
msgstr ""
#: pamac/main.py:385
msgid "Unknown"
msgstr ""
#: pamac/main.py:386
msgid "Install Reason"
msgstr ""
#: pamac/main.py:391
msgid "Signatures"
msgstr ""
#: pamac/main.py:395
msgid "Backup files"
msgstr ""
#: pamac/main.py:405
msgid "<big><b>Transaction Summary</b></big>"
msgstr ""
#: pamac/main.py:419 pamac/main.py:528
msgid "<b>Total download size: </b>"
msgstr ""
#: pamac/main.py:435
msgid "To update"
msgstr ""
#: pamac/main.py:520 pamac/main.py:1048
msgid "<big><b>Your system is up-to-date</b></big>"
msgstr ""
#: pamac/main.py:530
msgid "<big><b>1 available update</b></big>"
msgstr ""
#: pamac/main.py:532
msgid "<big><b>{number} available updates</b></big>"
msgstr ""
#: pamac/main.py:691 pamac/main.py:761
msgid "{pkgname1} will be replaced by {pkgname2}"
msgstr ""
#: pamac/main.py:708 pamac/main.py:742
msgid ""
"{pkgname1} conflicts with {pkgname2} but cannot be removed because it is "
"needed by {pkgname3}"
msgstr ""
#: pamac/main.py:713 pamac/main.py:747
msgid "{pkgname1} conflicts with {pkgname2}"
msgstr ""
#: pamac/main.py:723
msgid ""
"{pkgname1} conflicts with {pkgname2}\n"
"None of them will be installed"
msgstr ""
#: pamac/main.py:782
msgid ""
"<b>{pkgname} is provided by {number} packages.\n"
"Please choose the one(s) you want to install:</b>"
msgstr ""
#: pamac/main.py:808
msgid "No package is selected"
msgstr ""
#: pamac/main.py:849
msgid "Nothing to do"
msgstr ""
#: pamac/main.py:1032
msgid "Pamac is already running"
msgstr ""
#: pamac/common.py:13
#, python-format
msgid "%.1f KiB"
msgstr ""
#: pamac/common.py:16
#, python-format
msgid "%.2f MiB"
msgstr ""
#: gui/manager.glade:7
msgid "Choose"
msgstr ""
#: gui/manager.glade:112
msgid "Summary"
msgstr ""
#: gui/manager.glade:256
msgid "Progress"
msgstr ""
#: gui/manager.glade:402
msgid "Package Manager"
msgstr ""
#: gui/manager.glade:492
msgid "Search"
msgstr ""
#: gui/manager.glade:587 gui/manager.glade:680
msgid "State"
msgstr ""
#: gui/manager.glade:635
msgid "Repos"
msgstr ""
#: gui/manager.glade:710
msgid "Name"
msgstr ""
#: gui/manager.glade:728
msgid "Size"
msgstr ""
#: gui/manager.glade:829
msgid "Infos"
msgstr ""
#: gui/manager.glade:889
msgid "Deps"
msgstr ""
#: gui/manager.glade:954
msgid "Details"
msgstr ""
#: gui/manager.glade:1002
msgid "Files"
msgstr ""
#: gui/updater.glade:6
msgid "Update Manager"
msgstr ""

View File

@ -1,13 +1,19 @@
#! /usr/bin/python
# -*-coding:utf-8-*-
# -*- coding:utf-8 -*-
# i18n
import gettext
gettext.bindtextdomain('pamac', '/usr/share/locale')
gettext.textdomain('pamac')
_ = gettext.gettext
def format_size(size):
KiB_size = size / 1024
if KiB_size < 1000:
size_string = '%.1f KiB' % (KiB_size)
size_string = _('%.1f KiB') % (KiB_size)
return size_string
else:
size_string = '%.2f MiB' % (KiB_size / 1024)
size_string = _('%.2f MiB') % (KiB_size / 1024)
return size_string
def format_pkg_name(name):

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8 -*-
# -*- coding:utf-8 -*-
import io
import os

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8 -*-
# -*- coding:utf-8 -*-
from gi.repository import Gtk
from gi.repository.GdkPixbuf import Pixbuf
@ -10,7 +10,16 @@ from time import strftime, localtime
from pamac import config, common, transaction
# i18n
import gettext
import locale
locale.bindtextdomain('pamac', '/usr/share/locale')
gettext.bindtextdomain('pamac', '/usr/share/locale')
gettext.textdomain('pamac')
_ = gettext.gettext
interface = Gtk.Builder()
interface.set_translation_domain('pamac')
#interface.add_from_file('/usr/share/pamac/gui/dialogs.glade')
#ErrorDialog = interface.get_object('ErrorDialog')
@ -63,7 +72,7 @@ update_bottom_label = interface.get_object('update_bottom_label')
def action_signal_handler(action):
if action:
progress_label.set_text(action)
if ('Installing' in action) or ('Removing' in action) or ('Upgrading' in action) or ('Configuring' in action):
if (_('Installing') in action) or (_('Removing') in action) or (_('Upgrading') in action) or (_('Configuring') in action):
ProgressCancelButton.set_visible(False)
else:
ProgressCancelButton.set_visible(True)
@ -100,7 +109,7 @@ current_filter = (None, None)
transaction_type = None
transaction_dict = {}
mode = None
states = ['Installed', 'Uninstalled', 'Orphans', 'To install', 'To remove']
states = [_('Installed'), _('Uninstalled'), _('Orphans'), _('To install'), _('To remove')]
for state in states:
state_list.append([state])
@ -119,7 +128,7 @@ def get_repos():
repos_list.clear()
for repo in transaction.handle.get_syncdbs():
repos_list.append([repo.name])
repos_list.append(['local'])
repos_list.append([_('local')])
def set_list_dict_search(*patterns):
global pkg_name_list
@ -285,7 +294,7 @@ def set_list_dict_repos(repo):
def refresh_packages_list():
packages_list.clear()
if not pkg_name_list:
packages_list.append(["No package found", False, False, False, search_icon, '', 0])
packages_list.append([_('No package found'), False, False, False, search_icon, '', 0])
else:
for name in pkg_name_list:
if name in config.holdpkg:
@ -336,56 +345,56 @@ def set_infos_list(pkg):
# fix & in url
url = pkg.url.replace('&', '&amp;')
link_label.set_markup('<a href=\"{_url}\">{_url}</a>'.format(_url = url))
licenses_label.set_markup('Licenses: {}'.format(' '.join(pkg.licenses)))
licenses_label.set_markup(_('Licenses') + ': {}'.format(' '.join(pkg.licenses)))
def set_deps_list(pkg, style):
deps_list.clear()
if pkg.depends:
deps_list.append(['Depends On:', '\n'.join(pkg.depends)])
deps_list.append([_('Depends On') + ':', '\n'.join(pkg.depends)])
if pkg.optdepends:
deps_list.append(['Optional Deps:', '\n'.join(pkg.optdepends)])
deps_list.append([_('Optional Deps') + ':', '\n'.join(pkg.optdepends)])
if style == 'local':
if pkg.compute_requiredby():
deps_list.append(['Required By:', '\n'.join(pkg.compute_requiredby())])
deps_list.append([_('Required By')+':', '\n'.join(pkg.compute_requiredby())])
if pkg.provides:
details_list.append(['Provides:', ' '.join(pkg.provides)])
details_list.append([_('Provides')+':', ' '.join(pkg.provides)])
if pkg.replaces:
details_list.append(['Replaces:', ' '.join(pkg.replaces)])
details_list.append([_('Replaces')+':', ' '.join(pkg.replaces)])
if pkg.conflicts:
details_list.append(['Conflicts With:', ' '.join(pkg.conflicts)])
details_list.append([_('Conflicts With')+':', ' '.join(pkg.conflicts)])
def set_details_list(pkg, style):
details_list.clear()
if style == 'sync':
details_list.append(['Repository:', pkg.db.name])
details_list.append([_('Repository')+':', pkg.db.name])
if pkg.groups:
details_list.append(['Groups:', ' '.join(pkg.groups)])
details_list.append([_('Groups')+':', ' '.join(pkg.groups)])
if style == 'sync':
details_list.append(['Compressed Size:', common.format_size(pkg.size)])
details_list.append(['Download Size:', common.format_size(pkg.download_size)])
details_list.append([_('Compressed Size')+':', common.format_size(pkg.size)])
details_list.append([_('Download Size')+':', common.format_size(pkg.download_size)])
if style == 'local':
details_list.append(['Installed Size:', common.format_size(pkg.isize)])
details_list.append(['Packager:', pkg.packager])
details_list.append(['Architecture:', pkg.arch])
#details_list.append(['Build Date:', strftime("%a %d %b %Y %X %Z", localtime(pkg.builddate))])
details_list.append([_('Installed Size')+':', common.format_size(pkg.isize)])
details_list.append([_('Packager')+':', pkg.packager])
details_list.append([('Architecture')+':', pkg.arch])
#details_list.append([_('Build Date')+':', strftime("%a %d %b %Y %X %Z", localtime(pkg.builddate))])
if style == 'local':
details_list.append(['Install Date:', strftime("%a %d %b %Y %X %Z", localtime(pkg.installdate))])
details_list.append([_('Install Date')+':', strftime("%a %d %b %Y %X %Z", localtime(pkg.installdate))])
if pkg.reason == pyalpm.PKG_REASON_EXPLICIT:
reason = 'Explicitly installed'
reason = _('Explicitly installed')
elif pkg.reason == pyalpm.PKG_REASON_DEPEND:
reason = 'Installed as a dependency for another package'
reason = _('Installed as a dependency for another package')
else:
reason = 'N/A'
details_list.append(['Install Reason:', reason])
reason = _('Unknown')
details_list.append([_('Install Reason')+':', reason])
if style == 'sync':
#details_list.append(['Install Script:', 'Yes' if pkg.has_scriptlet else 'No'])
#details_list.append([_('Install Script')':', 'Yes' if pkg.has_scriptlet else 'No'])
#details_list.append(['MD5 Sum:', pkg.md5sum])
#details_list.append(['SHA256 Sum:', pkg.sha256sum])
details_list.append(['Signatures:', 'Yes' if pkg.base64_sig else 'No'])
details_list.append([_('Signatures')+':', 'Yes' if pkg.base64_sig else 'No'])
if style == 'local':
if len(pkg.backup) != 0:
#details_list.append(['Backup files:', '\n'.join(["%s %s" % (md5, file) for (file, md5) in pkg.backup])])
details_list.append(['Backup files:', '\n'.join(["%s" % (file) for (file, md5) in pkg.backup])])
#details_list.append(['_(Backup files)+':', '\n'.join(["%s %s" % (md5, file) for (file, md5) in pkg.backup])])
details_list.append([_('Backup files')+':', '\n'.join(["%s" % (file) for (file, md5) in pkg.backup])])
def set_files_list(pkg):
files_list.clear()
@ -395,10 +404,10 @@ def set_files_list(pkg):
def set_transaction_sum():
transaction_sum.clear()
sum_top_label.set_markup('<big><b>Transaction Summary</b></big>')
sum_top_label.set_markup(_('<big><b>Transaction Summary</b></big>'))
if transaction.to_remove:
transaction.to_remove = sorted(transaction.to_remove)
transaction_sum.append(['To remove:', transaction.to_remove[0]])
transaction_sum.append([_('To remove')+':', transaction.to_remove[0]])
i = 1
while i < len(transaction.to_remove):
transaction_sum.append([' ', transaction.to_remove[i]])
@ -409,7 +418,7 @@ def set_transaction_sum():
dsize = 0
for name in transaction.to_add:
dsize += transaction.syncpkgs[name].download_size
sum_bottom_label.set_markup('<b>Total download size: </b>'+common.format_size(dsize))
sum_bottom_label.set_markup(_('<b>Total download size: </b>')+common.format_size(dsize))
installed = []
for pkg_object in config.pacman_conf.initialize_alpm().get_localdb().pkgcache:
installed.append(pkg_object.name)
@ -418,14 +427,14 @@ def set_transaction_sum():
for name in to_remove_from_add:
transaction.to_add.remove(name)
if transaction.to_add:
transaction_sum.append(['To install:', transaction.to_add[0]])
transaction_sum.append([_('To install')+':', transaction.to_add[0]])
i = 1
while i < len(transaction.to_add):
transaction_sum.append([' ', transaction.to_add[i]])
i += 1
if mode == 'manager':
if transaction.to_update:
transaction_sum.append(['To update:', transaction.to_update[0]])
transaction_sum.append([_('To update')+':', transaction.to_update[0]])
i = 1
while i < len(transaction.to_update):
transaction_sum.append([' ', transaction.to_update[i]])
@ -494,7 +503,7 @@ def do_refresh():
"""Sync databases like pacman -Sy"""
if transaction.t_lock is False:
transaction.t_lock = True
progress_label.set_text('Refreshing...')
progress_label.set_text(_('Refreshing')+'...')
action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/refresh-cache.png')
progress_bar.set_text('')
progress_bar.set_fraction(0)
@ -510,7 +519,7 @@ def have_updates():
if not updates:
update_listore.append(['', ''])
update_bottom_label.set_markup('')
update_top_label.set_markup('<big><b>No available update </b></big>')
update_top_label.set_markup(_('<big><b>Your system is up-to-date</b></big>'))
return False
else:
dsize = 0
@ -518,8 +527,11 @@ def have_updates():
pkgname = pkg.name+" "+pkg.version
update_listore.append([pkgname, common.format_size(pkg.size)])
dsize += pkg.download_size
update_bottom_label.set_markup('<b>Total download size: </b>'+common.format_size(dsize))
update_top_label.set_markup('<big><b>{} available updates</b></big>'.format(len(updates)))
update_bottom_label.set_markup(_('<b>Total download size: </b>')+common.format_size(dsize))
if len(updates) == 1:
update_top_label.set_markup(_('<big><b>1 available update</b></big>'))
else:
update_top_label.set_markup(_('<big><b>{number} available updates</b></big>').format(number = len(updates)))
return True
def do_sysupgrade():
@ -581,7 +593,7 @@ def do_sysupgrade():
ConfDialog.show_all()
def finalize():
progress_label.set_text('Preparing...')
progress_label.set_text(_('Preparing')+'...')
action_icon.set_from_file('/usr/share/pamac/icons/24x24/status/setup.png')
progress_bar.set_text('')
progress_bar.set_fraction(0)
@ -678,7 +690,7 @@ def check_conflicts(mode, pkg_list):
transaction.to_remove.append(provide.name)
if warning:
warning += '\n'
warning += provide.name+' will be replaced by '+pkg.name
warning += _('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = provide.name, pkgname2 = pkg.name)
for conflict in pkg.conflicts:
provide = pyalpm.find_satisfier(transaction.localpkgs.values(), conflict)
if provide:
@ -695,12 +707,12 @@ def check_conflicts(mode, pkg_list):
str_required += item
if error:
error += '\n'
error += '{} conflicts with {} but cannot be removed because it is needed by {}'.format(provide.name, pkg.name, str_required)
error += _('{pkgname1} conflicts with {pkgname2} but cannot be removed because it is needed by {pkgname3}').format(pkgname1 = provide.name, pkgname2 = pkg.name, pkgname3 = str_required)
elif not provide.name in transaction.to_remove:
transaction.to_remove.append(provide.name)
if warning:
warning += '\n'
warning += pkg.name+' conflicts with '+provide.name
warning += _('{pkgname1} conflicts with {pkgname2}').format(pkgname1 = pkg.name, pkgname2 = provide.name)
provide = pyalpm.find_satisfier(depends[0], conflict)
if provide:
if not common.format_pkg_name(conflict) == pkg.name:
@ -710,7 +722,7 @@ def check_conflicts(mode, pkg_list):
transaction.to_add.remove(pkg.name)
if warning:
warning += '\n'
warning += pkg.name+' conflicts with '+common.format_pkg_name(conflict)+'\nNone of them will be installed'
warning += _('{pkgname1} conflicts with {pkgname2}\nNone of them will be installed').format(pkgname1 = pkg.name, pkgname2 = common.format_pkg_name(conflict))
i += 1
for pkg in transaction.localpkgs.values():
for conflict in pkg.conflicts:
@ -729,12 +741,12 @@ def check_conflicts(mode, pkg_list):
str_required += item
if error:
error += '\n'
error += '{} conflicts with {} but cannot be removed because it is needed by {}'.format(provide.name, pkg.name, str_required)
error += _('{pkgname1} conflicts with {pkgname2} but cannot be removed because it is needed by {pkgname3}').format(pkgname1 = provide.name, pkgname2 = pkg.name, pkgname3 = str_required)
elif not provide.name in transaction.to_remove:
transaction.to_remove.append(pkg.name)
if warning:
warning += '\n'
warning += provide.name+' conflicts with '+pkg.name
warning += _('{pkgname1} conflicts with {pkgname2}').format(pkgname1= provide.name, pkgname2 = pkg.name)
if mode == 'updating':
for pkg in transaction.syncpkgs.values():
for replace in pkg.replaces:
@ -748,7 +760,7 @@ def check_conflicts(mode, pkg_list):
transaction.to_remove.append(provide.name)
if warning:
warning += '\n'
warning += provide.name+' will be replaced by '+pkg.name
warning += _('{pkgname1} will be replaced by {pkgname2}').format(pkgname1 = provide.name, pkgname2 = pkg.name)
if not pkg.name in transaction.to_add:
transaction.to_add.append(pkg.name)
print('check result:', 'to add:', transaction.to_add, 'to remove:', transaction.to_remove)
@ -769,7 +781,7 @@ def choose_provides(name):
if not pkg.name in provides.keys():
provides[pkg.name] = pkg
if provides:
choose_label.set_markup('<b>{} is provided by {} packages.\nPlease choose the one(s) you want to install:</b>'.format(name,str(len(provides.keys()))))
choose_label.set_markup(_('<b>{pkgname} is provided by {number} packages.\nPlease choose the one(s) you want to install:</b>').format(pkgname = name, number = str(len(provides.keys()))))
choose_list.clear()
for name in provides.keys():
if transaction.handle.get_localdb().get_pkg(name):
@ -795,7 +807,7 @@ class Handler:
def on_Manager_ValidButton_clicked(self, *arg):
if not transaction_dict:
transaction.ErrorDialog.format_secondary_text("No package is selected")
transaction.ErrorDialog.format_secondary_text(_('No package is selected'))
response = transaction.ErrorDialog.run()
if response:
transaction.ErrorDialog.hide()
@ -836,7 +848,7 @@ class Handler:
set_transaction_sum()
ConfDialog.show_all()
else:
transaction.WarningDialog.format_secondary_text('Nothing to do')
transaction.WarningDialog.format_secondary_text(_('Nothing to do'))
response = transaction.WarningDialog.run()
if response:
transaction.WarningDialog.hide()
@ -910,15 +922,15 @@ class Handler:
global current_filter
liste, line = state_selection.get_selected()
if line is not None:
if state_list[line][0] == 'Installed':
if state_list[line][0] == _('Installed'):
current_filter = ('installed', None)
if state_list[line][0] == 'Uninstalled':
if state_list[line][0] == _('Uninstalled'):
current_filter = ('uninstalled', None)
if state_list[line][0] == 'Orphans':
if state_list[line][0] == _('Orphans'):
current_filter = ('orphans', None)
if state_list[line][0] == 'To install':
if state_list[line][0] == _('To install'):
current_filter = ('to_install', None)
if state_list[line][0] == 'To remove':
if state_list[line][0] == _('To remove'):
current_filter = ('to_remove', None)
set_packages_list()
@ -926,7 +938,7 @@ class Handler:
global current_filter
liste, line = repos_selection.get_selected()
if line is not None:
if repos_list[line][0] == 'local':
if repos_list[line][0] == _('local'):
current_filter = ('local', None)
else:
current_filter = ('repo', repos_list[line][0])
@ -1019,7 +1031,7 @@ class Handler:
def main(_mode):
if common.pid_file_exists():
transaction.ErrorDialog.format_secondary_text('Another instance of Pamac is running')
transaction.ErrorDialog.format_secondary_text(_('Pamac is already running'))
response = transaction.ErrorDialog.run()
if response:
transaction.ErrorDialog.hide()
@ -1035,7 +1047,7 @@ def main(_mode):
if mode == 'manager':
ManagerWindow.show_all()
if mode == 'updater':
update_top_label.set_markup('<big><b>Available updates</b></big>')
update_top_label.set_markup(_('<big><b>Your system is up-to-date</b></big>'))
update_bottom_label.set_markup('')
UpdaterWindow.show_all()
while Gtk.events_pending():

View File

@ -1,5 +1,5 @@
#! /usr/bin/python
# -*-coding:utf-8-*-
# -*- coding:utf-8 -*-
from gi.repository import Gtk
@ -63,7 +63,6 @@ Release = proxy.get_dbus_method('Release','org.manjaro.pamac')
StopDaemon = proxy.get_dbus_method('StopDaemon','org.manjaro.pamac')
def init_transaction(**options):
"Transaction initialization"
global t_lock
error = Init(dbus.Dictionary(options, signature='sb'))
if not error:

345
po/fr.po Normal file
View File

@ -0,0 +1,345 @@
# Translation of Pamac.
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the Pamac package.
# Guillaume Benoit <guillaume@manjaro.org>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: pamac\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-31 18:55+0200\n"
"PO-Revision-Date: 2013-03-30 15:18+0100\n"
"Last-Translator: <guillaume@manjaro.org>\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: pamac-daemon.py:30 pamac/main.py:594
msgid "Preparing"
msgstr "Préparation"
#: pamac-daemon.py:69
msgid "Checking dependencies"
msgstr "Vérification des dépendances"
#: pamac-daemon.py:72
msgid "Checking file conflicts"
msgstr "Analyse des conflits entre fichiers"
#: pamac-daemon.py:75
msgid "Resolving dependencies"
msgstr "Résolution des dépendances"
#: pamac-daemon.py:78
msgid "Checking inter conflicts"
msgstr "Recherche des conflits entre paquets"
#: pamac-daemon.py:81 pamac/main.py:73
msgid "Installing"
msgstr "Installation"
#: pamac-daemon.py:88 pamac/main.py:73
msgid "Removing"
msgstr "Désinstallation"
#: pamac-daemon.py:95 pamac/main.py:73
msgid "Upgrading"
msgstr "Mise à jour"
#: pamac-daemon.py:102
msgid "Checking integrity"
msgstr "Vérification de l'intégrité des paquets"
#: pamac-daemon.py:106
msgid "Loading packages files"
msgstr "Chargement des fichiers des paquets"
#: pamac-daemon.py:110 pamac/main.py:73
msgid "Configuring"
msgstr "Configuration"
#: pamac-daemon.py:162
msgid "Downloading {size}"
msgstr "Télécharge {size}"
#: pamac-daemon.py:167 pamac/main.py:504
msgid "Refreshing"
msgstr "Actualisation"
#: pamac-daemon.py:270 pamac-daemon.py:378 pamac-daemon.py:386
#: pamac-daemon.py:408
msgid "Authentication failed"
msgstr "Authentification échoué"
#: pamac-daemon.py:374
msgid "Transaction successfully finished"
msgstr "Transaction terminé avec succès"
#: pamac-tray.py:22
msgid "{number} available updates"
msgstr "{number} mises à jour disponibles"
#: pamac-tray.py:23
msgid "1 available update"
msgstr "1 mise à jour disponible"
#: pamac-tray.py:25
msgid "Your system is up-to-date"
msgstr "Votre système est à jour"
#: pamac-tray.py:33
msgid "Install/Check for updates"
msgstr "Installer/Vérifier les mises à jour"
#: pamac-tray.py:36
msgid "Run pamac-manager"
msgstr "Exécuter pamac-manager"
#: pamac-tray.py:39
msgid "Quit"
msgstr "Quitter"
#: pamac/main.py:110 pamac/main.py:923
msgid "Installed"
msgstr "Installé"
#: pamac/main.py:110 pamac/main.py:925
msgid "Uninstalled"
msgstr "Non installé"
#: pamac/main.py:110 pamac/main.py:927
msgid "Orphans"
msgstr "Orphelins"
#: pamac/main.py:110 pamac/main.py:428 pamac/main.py:929
msgid "To install"
msgstr "A installer"
#: pamac/main.py:110 pamac/main.py:408 pamac/main.py:931
msgid "To remove"
msgstr "A désinstaller"
#: pamac/main.py:129 pamac/main.py:939
msgid "local"
msgstr "locaux"
#: pamac/main.py:295
msgid "No package found"
msgstr "Aucun paquet trouvé"
#: pamac/main.py:346
msgid "Licenses"
msgstr "Licenses"
#: pamac/main.py:351
msgid "Depends On"
msgstr "Dépend de"
#: pamac/main.py:353
msgid "Optional Deps"
msgstr "Dépendances opt."
#: pamac/main.py:356
msgid "Required By"
msgstr "Requis par"
#: pamac/main.py:358
msgid "Provides"
msgstr "Fourni"
#: pamac/main.py:360
msgid "Replaces"
msgstr "Remplace"
#: pamac/main.py:362
msgid "Conflicts With"
msgstr "Est conflit avec"
#: pamac/main.py:367
msgid "Repository"
msgstr "Dépôt"
#: pamac/main.py:369 gui/manager.glade:539
msgid "Groups"
msgstr "Groupes"
#: pamac/main.py:371
msgid "Compressed Size"
msgstr "Taille compressée"
#: pamac/main.py:372
msgid "Download Size"
msgstr "Taille du Téléchargement"
#: pamac/main.py:374
msgid "Installed Size"
msgstr "Taille installé"
#: pamac/main.py:375
msgid "Packager"
msgstr "Paqueteur"
#: pamac/main.py:379
msgid "Install Date"
msgstr "Installé le"
#: pamac/main.py:381
msgid "Explicitly installed"
msgstr "Explicitement installé"
#: pamac/main.py:383
msgid "Installed as a dependency for another package"
msgstr "Installé comme dépendance d'un autre paquet"
#: pamac/main.py:385
msgid "Unknown"
msgstr "Inconnu"
#: pamac/main.py:386
msgid "Install Reason"
msgstr "Motif d'installation"
#: pamac/main.py:391
msgid "Signatures"
msgstr "Signatures"
#: pamac/main.py:395
msgid "Backup files"
msgstr "Fichiers sauvegardés"
#: pamac/main.py:405
msgid "<big><b>Transaction Summary</b></big>"
msgstr "<big><b>Résumé de la transaction</b></big>"
#: pamac/main.py:419 pamac/main.py:528
msgid "<b>Total download size: </b>"
msgstr "<b>Taille totale du téléchargement: </b>"
#: pamac/main.py:435
msgid "To update"
msgstr "A mettre à jour"
#: pamac/main.py:520 pamac/main.py:1048
msgid "<big><b>Your system is up-to-date</b></big>"
msgstr "<big><b>Votre système est à jour</b></big>"
#: pamac/main.py:530
msgid "<big><b>1 available update</b></big>"
msgstr "<big><b>1 mise à jour disponible</b></big>"
#: pamac/main.py:532
msgid "<big><b>{number} available updates</b></big>"
msgstr "<big><b>{number} mises à jour disponibles</b></big>"
#: pamac/main.py:691 pamac/main.py:761
msgid "{pkgname1} will be replaced by {pkgname2}"
msgstr "{pkgname1} sera remplacé par {pkgname2}"
#: pamac/main.py:708 pamac/main.py:742
msgid ""
"{pkgname1} conflicts with {pkgname2} but cannot be removed because it is "
"needed by {pkgname3}"
msgstr ""
"{pkgname1} est en conflit avec {pkgname2} mais ne peut pas être désinstaller "
"car il est requis par {pkgname3}"
#: pamac/main.py:713 pamac/main.py:747
msgid "{pkgname1} conflicts with {pkgname2}"
msgstr "{pkgname1} est en conflit avec {pkgname2}"
#: pamac/main.py:723
msgid ""
"{pkgname1} conflicts with {pkgname2}\n"
"None of them will be installed"
msgstr ""
"{pkgname1} est en conflit avec {pkgname2}}\n"
"Aucun d'entre eux ne sera installé"
#: pamac/main.py:782
msgid ""
"<b>{pkgname} is provided by {number} packages.\n"
"Please choose the one(s) you want to install:</b>"
msgstr ""
"<b>{pkgname} est fourni par {number} paquets.\n"
"Choisir choose the one(s) you want to install:</b>"
#: pamac/main.py:808
msgid "No package is selected"
msgstr "Aucun paquet n'est sélectionné"
#: pamac/main.py:849
msgid "Nothing to do"
msgstr "Rien à faire"
#: pamac/main.py:1032
msgid "Pamac is already running"
msgstr "Pamac est déjà en cours d'éxécution"
#: pamac/common.py:13
#, python-format
msgid "%.1f KiB"
msgstr "%.1f Ko"
#: pamac/common.py:16
#, python-format
msgid "%.2f MiB"
msgstr "%.2f Mo"
#: gui/manager.glade:7
msgid "Choose"
msgstr "Choisir"
#: gui/manager.glade:112
msgid "Summary"
msgstr "Résumé"
#: gui/manager.glade:256
msgid "Progress"
msgstr "Progression"
#: gui/manager.glade:402
msgid "Package Manager"
msgstr "Gestionnaire de paquets"
#: gui/manager.glade:492
msgid "Search"
msgstr "Rechercher"
#: gui/manager.glade:587 gui/manager.glade:680
msgid "State"
msgstr "Etat"
#: gui/manager.glade:635
msgid "Repos"
msgstr "Dépôts"
#: gui/manager.glade:710
msgid "Name"
msgstr "Nom"
#: gui/manager.glade:728
msgid "Size"
msgstr "Taille"
#: gui/manager.glade:829
msgid "Infos"
msgstr "Infos"
#: gui/manager.glade:889
msgid "Deps"
msgstr "Dépendances"
#: gui/manager.glade:954
msgid "Details"
msgstr "Détails"
#: gui/manager.glade:1002
msgid "Files"
msgstr "Fichiers"
#: gui/updater.glade:6
msgid "Update Manager"
msgstr "Gestionnaire de mise à jour"

View File

@ -1,78 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-29 16:23+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: gui/manager.glade:7
msgid "Choose"
msgstr ""
#: gui/manager.glade:889
msgid "Deps"
msgstr ""
#: gui/manager.glade:954
msgid "Details"
msgstr ""
#: gui/manager.glade:1002
msgid "Files"
msgstr ""
#: gui/manager.glade:539
msgid "Groups"
msgstr ""
#: gui/manager.glade:829
msgid "Infos"
msgstr ""
#: gui/manager.glade:680
msgid "Installed"
msgstr ""
#: gui/manager.glade:710
msgid "Name"
msgstr ""
#: gui/manager.glade:402
msgid "Package Manager"
msgstr ""
#: gui/manager.glade:256
msgid "Progress"
msgstr ""
#: gui/manager.glade:635
msgid "Repos"
msgstr ""
#: gui/manager.glade:492
msgid "Search"
msgstr ""
#: gui/manager.glade:728
msgid "Size"
msgstr ""
#: gui/manager.glade:587
msgid "State"
msgstr ""
#: gui/manager.glade:112
msgid "Summary"
msgstr ""

View File

@ -1,22 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-30 05:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: gui/updater.glade:6
msgid "Update Manager"
msgstr ""

18
pot_head Normal file
View File

@ -0,0 +1,18 @@
# Translation of Pamac.
# Copyright (C) 2007-2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the Pamac package.
# Guillaume Benoit <guillaume@manjaro.org>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: pamac\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-30 15:09+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"