forked from openlp/openlp
update i18n implementation
This commit is contained in:
parent
95998f456a
commit
ea64675d65
17
openlp.pyw
17
openlp.pyw
@ -37,7 +37,7 @@ log = logging.getLogger()
|
||||
from openlp.core.lib import Receiver, str_to_bool
|
||||
from openlp.core.resources import qInitResources
|
||||
from openlp.core.ui import MainWindow, SplashScreen, ScreenList
|
||||
from openlp.core.utils import AppLocation, ConfigHelper
|
||||
from openlp.core.utils import AppLocation, ConfigHelper, LanguageManager
|
||||
|
||||
application_stylesheet = u"""
|
||||
QMainWindow::separator
|
||||
@ -193,17 +193,10 @@ def main():
|
||||
qInitResources()
|
||||
# Now create and actually run the application.
|
||||
app = OpenLP(qt_args)
|
||||
lang_Path = AppLocation.get_directory(AppLocation.AppDir)
|
||||
if hasattr(sys, u'frozen'):
|
||||
lang_Path = os.path.join(lang_Path, u'..')
|
||||
lang_Path = os.path.join(lang_Path, u'resources', u'i18n')
|
||||
locale = QtCore.QLocale.system().name()
|
||||
qtTranslator = QtCore.QTranslator()
|
||||
if qtTranslator.load("openlp_" + locale, lang_Path):
|
||||
app.installTranslator(qtTranslator)
|
||||
appTranslator = QtCore.QTranslator()
|
||||
if appTranslator.load("openlp_" + locale, lang_Path):
|
||||
app.installTranslator(appTranslator)
|
||||
#i18n Set Language
|
||||
language = LanguageManager.getLanguage()
|
||||
appTranslator = LanguageManager.getTranslator(language)
|
||||
app.installTranslator(appTranslator)
|
||||
|
||||
sys.exit(app.run())
|
||||
|
||||
|
@ -117,10 +117,13 @@ class OpenLPToolbar(QtGui.QToolBar):
|
||||
The title of the icon to search for.
|
||||
"""
|
||||
title = QtCore.QString(title)
|
||||
if self.icons[title]:
|
||||
return self.icons[title]
|
||||
else:
|
||||
log.error(u'getIconFromTitle - no icon for %s' % title)
|
||||
try:
|
||||
if self.icons[title]:
|
||||
return self.icons[title]
|
||||
else:
|
||||
log.error(u'getIconFromTitle - no icon for %s' % title)
|
||||
return QtGui.QIcon()
|
||||
except:
|
||||
return QtGui.QIcon()
|
||||
|
||||
def makeWidgetsInvisible(self, widgets):
|
||||
|
@ -33,7 +33,7 @@ from openlp.core.ui import AboutForm, SettingsForm, \
|
||||
PluginForm, MediaDockManager, VideoDisplay
|
||||
from openlp.core.lib import RenderManager, PluginConfig, build_icon, \
|
||||
OpenLPDockWidget, SettingsManager, PluginManager, Receiver, str_to_bool
|
||||
from openlp.core.utils import check_latest_version, AppLocation
|
||||
from openlp.core.utils import check_latest_version, AppLocation, LanguageManager, ConfigHelper
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
@ -190,19 +190,19 @@ class Ui_MainWindow(object):
|
||||
self.ThemeManagerDock.setVisible(self.settingsmanager.showThemeManager)
|
||||
# Create the menu items
|
||||
self.FileNewItem = QtGui.QAction(MainWindow)
|
||||
#self.FileNewItem.setIcon(
|
||||
# self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
# u'New Service'))
|
||||
self.FileNewItem.setIcon(
|
||||
self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
MainWindow.trUtf8('New Service')))
|
||||
self.FileNewItem.setObjectName(u'FileNewItem')
|
||||
self.FileOpenItem = QtGui.QAction(MainWindow)
|
||||
#self.FileOpenItem.setIcon(
|
||||
# self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
# u'Open Service'))
|
||||
self.FileOpenItem.setIcon(
|
||||
self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
MainWindow.trUtf8('Open Service')))
|
||||
self.FileOpenItem.setObjectName(u'FileOpenItem')
|
||||
self.FileSaveItem = QtGui.QAction(MainWindow)
|
||||
#self.FileSaveItem.setIcon(
|
||||
# self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
# u'Save Service'))
|
||||
self.FileSaveItem.setIcon(
|
||||
self.ServiceManagerContents.Toolbar.getIconFromTitle(
|
||||
MainWindow.trUtf8('Save Service')))
|
||||
self.FileSaveItem.setObjectName(u'FileSaveItem')
|
||||
self.FileSaveAsItem = QtGui.QAction(MainWindow)
|
||||
self.FileSaveAsItem.setObjectName(u'FileSaveAsItem')
|
||||
@ -257,10 +257,26 @@ class Ui_MainWindow(object):
|
||||
self.HelpOnlineHelpItem.setObjectName(u'HelpOnlineHelpItem')
|
||||
self.HelpWebSiteItem = QtGui.QAction(MainWindow)
|
||||
self.HelpWebSiteItem.setObjectName(u'HelpWebSiteItem')
|
||||
self.LanguageTranslateItem = QtGui.QAction(MainWindow)
|
||||
self.LanguageTranslateItem.setObjectName(u'LanguageTranslateItem')
|
||||
self.LanguageEnglishItem = QtGui.QAction(MainWindow)
|
||||
self.LanguageEnglishItem.setObjectName(u'LanguageEnglishItem')
|
||||
#i18n Language Items
|
||||
self.AutoLanguageItem = QtGui.QAction(MainWindow)
|
||||
self.AutoLanguageItem.setObjectName(u'AutoLanguageItem')
|
||||
self.AutoLanguageItem.setCheckable(True)
|
||||
self.LanguageGroup = QtGui.QActionGroup(MainWindow)
|
||||
qmList = LanguageManager.getQmList()
|
||||
savedLanguage = LanguageManager.getLanguage()
|
||||
self.LanguageItem = {}
|
||||
for key in qmList.keys():
|
||||
self.LanguageItem[key] = QtGui.QAction(MainWindow)
|
||||
self.LanguageItem[key].setObjectName(key)
|
||||
self.LanguageItem[key].setCheckable(True)
|
||||
if LanguageManager.__AutoLanguage__ == True:
|
||||
self.AutoLanguageItem.setChecked(True)
|
||||
self.LanguageGroup.setEnabled(False)
|
||||
else:
|
||||
self.AutoLanguageItem.setChecked(False)
|
||||
self.LanguageGroup.setEnabled(True)
|
||||
if qmList[key] == savedLanguage:
|
||||
self.LanguageItem[key].setChecked(True)
|
||||
self.ToolsAddToolItem = QtGui.QAction(MainWindow)
|
||||
AddToolIcon = build_icon(u':/tools/tools_add.png')
|
||||
self.ToolsAddToolItem.setIcon(AddToolIcon)
|
||||
@ -295,9 +311,12 @@ class Ui_MainWindow(object):
|
||||
self.OptionsViewMenu.addAction(self.ViewThemeManagerItem)
|
||||
self.OptionsViewMenu.addSeparator()
|
||||
self.OptionsViewMenu.addAction(self.action_Preview_Panel)
|
||||
self.OptionsLanguageMenu.addAction(self.LanguageEnglishItem)
|
||||
#i18n add Language Actions
|
||||
self.OptionsLanguageMenu.addAction(self.AutoLanguageItem)
|
||||
self.OptionsLanguageMenu.addSeparator()
|
||||
self.OptionsLanguageMenu.addAction(self.LanguageTranslateItem)
|
||||
for item in sorted(self.LanguageItem):
|
||||
self.LanguageGroup.addAction(self.LanguageItem[item])
|
||||
self.OptionsLanguageMenu.addAction(self.LanguageItem[item])
|
||||
self.OptionsMenu.addAction(self.OptionsLanguageMenu.menuAction())
|
||||
self.OptionsMenu.addAction(self.OptionsViewMenu.menuAction())
|
||||
self.OptionsMenu.addSeparator()
|
||||
@ -335,95 +354,98 @@ class Ui_MainWindow(object):
|
||||
"""
|
||||
Set up the translation system
|
||||
"""
|
||||
MainWindow.mainTitle = self.trUtf8('OpenLP 2.0')
|
||||
MainWindow.defaultThemeText = self.trUtf8(
|
||||
MainWindow.mainTitle = MainWindow.trUtf8('OpenLP 2.0')
|
||||
MainWindow.language = MainWindow.trUtf8('English')
|
||||
MainWindow.defaultThemeText = MainWindow.trUtf8(
|
||||
'Default Theme: ')
|
||||
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
||||
self.FileMenu.setTitle(self.trUtf8('&File'))
|
||||
self.FileImportMenu.setTitle(self.trUtf8('&Import'))
|
||||
self.FileExportMenu.setTitle(self.trUtf8('&Export'))
|
||||
self.OptionsMenu.setTitle(self.trUtf8('&Options'))
|
||||
self.OptionsViewMenu.setTitle(self.trUtf8('&View'))
|
||||
self.ViewModeMenu.setTitle(self.trUtf8('M&ode'))
|
||||
self.OptionsLanguageMenu.setTitle(self.trUtf8(
|
||||
self.FileMenu.setTitle(MainWindow.trUtf8('&File'))
|
||||
self.FileImportMenu.setTitle(MainWindow.trUtf8('&Import'))
|
||||
self.FileExportMenu.setTitle(MainWindow.trUtf8('&Export'))
|
||||
self.OptionsMenu.setTitle(MainWindow.trUtf8('&Options'))
|
||||
self.OptionsViewMenu.setTitle(MainWindow.trUtf8('&View'))
|
||||
self.ViewModeMenu.setTitle(MainWindow.trUtf8('M&ode'))
|
||||
self.OptionsLanguageMenu.setTitle(MainWindow.trUtf8(
|
||||
u'&Language'))
|
||||
self.ToolsMenu.setTitle(self.trUtf8('&Tools'))
|
||||
self.HelpMenu.setTitle(self.trUtf8('&Help'))
|
||||
self.ToolsMenu.setTitle(MainWindow.trUtf8('&Tools'))
|
||||
self.HelpMenu.setTitle(MainWindow.trUtf8('&Help'))
|
||||
self.MediaManagerDock.setWindowTitle(
|
||||
self.trUtf8('Media Manager'))
|
||||
MainWindow.trUtf8('Media Manager'))
|
||||
self.ServiceManagerDock.setWindowTitle(
|
||||
self.trUtf8('Service Manager'))
|
||||
MainWindow.trUtf8('Service Manager'))
|
||||
self.ThemeManagerDock.setWindowTitle(
|
||||
self.trUtf8('Theme Manager'))
|
||||
self.FileNewItem.setText(self.trUtf8('&New'))
|
||||
self.FileNewItem.setToolTip(self.trUtf8('New Service'))
|
||||
self.FileNewItem.setStatusTip(self.trUtf8('Create a new Service'))
|
||||
self.FileNewItem.setShortcut(self.trUtf8('Ctrl+N'))
|
||||
self.FileOpenItem.setText(self.trUtf8('&Open'))
|
||||
self.FileOpenItem.setToolTip(self.trUtf8('Open Service'))
|
||||
self.FileOpenItem.setStatusTip(self.trUtf8('Open an existing service'))
|
||||
self.FileOpenItem.setShortcut(self.trUtf8('Ctrl+O'))
|
||||
self.FileSaveItem.setText(self.trUtf8('&Save'))
|
||||
self.FileSaveItem.setToolTip(self.trUtf8('Save Service'))
|
||||
MainWindow.trUtf8('Theme Manager'))
|
||||
self.FileNewItem.setText(MainWindow.trUtf8('&New'))
|
||||
self.FileNewItem.setToolTip(MainWindow.trUtf8('New Service'))
|
||||
self.FileNewItem.setStatusTip(MainWindow.trUtf8('Create a new Service'))
|
||||
self.FileNewItem.setShortcut(MainWindow.trUtf8('Ctrl+N'))
|
||||
self.FileOpenItem.setText(MainWindow.trUtf8('&Open'))
|
||||
self.FileOpenItem.setToolTip(MainWindow.trUtf8('Open Service'))
|
||||
self.FileOpenItem.setStatusTip(MainWindow.trUtf8('Open an existing service'))
|
||||
self.FileOpenItem.setShortcut(MainWindow.trUtf8('Ctrl+O'))
|
||||
self.FileSaveItem.setText(MainWindow.trUtf8('&Save'))
|
||||
self.FileSaveItem.setToolTip(MainWindow.trUtf8('Save Service'))
|
||||
self.FileSaveItem.setStatusTip(
|
||||
self.trUtf8('Save the current service to disk'))
|
||||
self.FileSaveItem.setShortcut(self.trUtf8('Ctrl+S'))
|
||||
self.FileSaveAsItem.setText(self.trUtf8('Save &As...'))
|
||||
self.FileSaveAsItem.setToolTip(self.trUtf8('Save Service As'))
|
||||
MainWindow.trUtf8('Save the current service to disk'))
|
||||
self.FileSaveItem.setShortcut(MainWindow.trUtf8('Ctrl+S'))
|
||||
self.FileSaveAsItem.setText(MainWindow.trUtf8('Save &As...'))
|
||||
self.FileSaveAsItem.setToolTip(MainWindow.trUtf8('Save Service As'))
|
||||
self.FileSaveAsItem.setStatusTip(
|
||||
self.trUtf8('Save the current service under a new name'))
|
||||
self.FileSaveAsItem.setShortcut(self.trUtf8('F12'))
|
||||
self.FileExitItem.setText(self.trUtf8('E&xit'))
|
||||
self.FileExitItem.setStatusTip(self.trUtf8('Quit OpenLP'))
|
||||
self.FileExitItem.setShortcut(self.trUtf8('Alt+F4'))
|
||||
self.ImportThemeItem.setText(self.trUtf8('&Theme'))
|
||||
self.ImportLanguageItem.setText(self.trUtf8('&Language'))
|
||||
self.ExportThemeItem.setText(self.trUtf8('&Theme'))
|
||||
self.ExportLanguageItem.setText(self.trUtf8('&Language'))
|
||||
self.actionLook_Feel.setText(self.trUtf8('Look && &Feel'))
|
||||
self.OptionsSettingsItem.setText(self.trUtf8('&Settings'))
|
||||
self.ViewMediaManagerItem.setText(self.trUtf8('&Media Manager'))
|
||||
self.ViewMediaManagerItem.setToolTip(self.trUtf8('Toggle Media Manager'))
|
||||
MainWindow.trUtf8('Save the current service under a new name'))
|
||||
self.FileSaveAsItem.setShortcut(MainWindow.trUtf8('F12'))
|
||||
self.FileExitItem.setText(MainWindow.trUtf8('E&xit'))
|
||||
self.FileExitItem.setStatusTip(MainWindow.trUtf8('Quit OpenLP'))
|
||||
self.FileExitItem.setShortcut(MainWindow.trUtf8('Alt+F4'))
|
||||
self.ImportThemeItem.setText(MainWindow.trUtf8('&Theme'))
|
||||
self.ImportLanguageItem.setText(MainWindow.trUtf8('&Language'))
|
||||
self.ExportThemeItem.setText(MainWindow.trUtf8('&Theme'))
|
||||
self.ExportLanguageItem.setText(MainWindow.trUtf8('&Language'))
|
||||
self.actionLook_Feel.setText(MainWindow.trUtf8('Look && &Feel'))
|
||||
self.OptionsSettingsItem.setText(MainWindow.trUtf8('&Settings'))
|
||||
self.ViewMediaManagerItem.setText(MainWindow.trUtf8('&Media Manager'))
|
||||
self.ViewMediaManagerItem.setToolTip(MainWindow.trUtf8('Toggle Media Manager'))
|
||||
self.ViewMediaManagerItem.setStatusTip(
|
||||
self.trUtf8('Toggle the visibility of the Media Manager'))
|
||||
self.ViewMediaManagerItem.setShortcut(self.trUtf8('F8'))
|
||||
self.ViewThemeManagerItem.setText(self.trUtf8('&Theme Manager'))
|
||||
self.ViewThemeManagerItem.setToolTip(self.trUtf8('Toggle Theme Manager'))
|
||||
MainWindow.trUtf8('Toggle the visibility of the Media Manager'))
|
||||
self.ViewMediaManagerItem.setShortcut(MainWindow.trUtf8('F8'))
|
||||
self.ViewThemeManagerItem.setText(MainWindow.trUtf8('&Theme Manager'))
|
||||
self.ViewThemeManagerItem.setToolTip(MainWindow.trUtf8('Toggle Theme Manager'))
|
||||
self.ViewThemeManagerItem.setStatusTip(
|
||||
self.trUtf8('Toggle the visibility of the Theme Manager'))
|
||||
self.ViewThemeManagerItem.setShortcut(self.trUtf8('F10'))
|
||||
self.ViewServiceManagerItem.setText(self.trUtf8('&Service Manager'))
|
||||
MainWindow.trUtf8('Toggle the visibility of the Theme Manager'))
|
||||
self.ViewThemeManagerItem.setShortcut(MainWindow.trUtf8('F10'))
|
||||
self.ViewServiceManagerItem.setText(MainWindow.trUtf8('&Service Manager'))
|
||||
self.ViewServiceManagerItem.setToolTip(
|
||||
self.trUtf8('Toggle Service Manager'))
|
||||
MainWindow.trUtf8('Toggle Service Manager'))
|
||||
self.ViewServiceManagerItem.setStatusTip(
|
||||
self.trUtf8('Toggle the visibility of the Service Manager'))
|
||||
self.ViewServiceManagerItem.setShortcut(self.trUtf8('F9'))
|
||||
self.action_Preview_Panel.setText(self.trUtf8('&Preview Panel'))
|
||||
self.action_Preview_Panel.setToolTip(self.trUtf8('Toggle Preview Panel'))
|
||||
MainWindow.trUtf8('Toggle the visibility of the Service Manager'))
|
||||
self.ViewServiceManagerItem.setShortcut(MainWindow.trUtf8('F9'))
|
||||
self.action_Preview_Panel.setText(MainWindow.trUtf8('&Preview Panel'))
|
||||
self.action_Preview_Panel.setToolTip(MainWindow.trUtf8('Toggle Preview Panel'))
|
||||
self.action_Preview_Panel.setStatusTip(
|
||||
self.trUtf8('Toggle the visibility of the Preview Panel'))
|
||||
self.action_Preview_Panel.setShortcut(self.trUtf8('F11'))
|
||||
self.PluginItem.setText(self.trUtf8('&Plugin List'))
|
||||
self.PluginItem.setStatusTip(self.trUtf8('List the Plugins'))
|
||||
self.PluginItem.setShortcut(self.trUtf8('Alt+F7'))
|
||||
self.HelpDocumentationItem.setText(self.trUtf8('&User Guide'))
|
||||
self.HelpAboutItem.setText(self.trUtf8('&About'))
|
||||
MainWindow.trUtf8('Toggle the visibility of the Preview Panel'))
|
||||
self.action_Preview_Panel.setShortcut(MainWindow.trUtf8('F11'))
|
||||
self.PluginItem.setText(MainWindow.trUtf8('&Plugin List'))
|
||||
self.PluginItem.setStatusTip(MainWindow.trUtf8('List the Plugins'))
|
||||
self.PluginItem.setShortcut(MainWindow.trUtf8('Alt+F7'))
|
||||
self.HelpDocumentationItem.setText(MainWindow.trUtf8('&User Guide'))
|
||||
self.HelpAboutItem.setText(MainWindow.trUtf8('&About'))
|
||||
self.HelpAboutItem.setStatusTip(
|
||||
self.trUtf8('More information about OpenLP'))
|
||||
self.HelpAboutItem.setShortcut(self.trUtf8('Ctrl+F1'))
|
||||
self.HelpOnlineHelpItem.setText(self.trUtf8('&Online Help'))
|
||||
self.HelpWebSiteItem.setText(self.trUtf8('&Web Site'))
|
||||
self.LanguageTranslateItem.setText(self.trUtf8('&Translate'))
|
||||
self.LanguageTranslateItem.setStatusTip(
|
||||
self.trUtf8('Translate the interface to your language'))
|
||||
self.LanguageEnglishItem.setText(self.trUtf8('English'))
|
||||
self.LanguageEnglishItem.setStatusTip(
|
||||
self.trUtf8('Set the interface language to English'))
|
||||
self.ToolsAddToolItem.setText(self.trUtf8('Add &Tool...'))
|
||||
MainWindow.trUtf8('More information about OpenLP'))
|
||||
self.HelpAboutItem.setShortcut(MainWindow.trUtf8('Ctrl+F1'))
|
||||
self.HelpOnlineHelpItem.setText(MainWindow.trUtf8('&Online Help'))
|
||||
self.HelpWebSiteItem.setText(MainWindow.trUtf8('&Web Site'))
|
||||
#i18n
|
||||
self.AutoLanguageItem.setText(MainWindow.trUtf8('&Auto Detect'))
|
||||
self.AutoLanguageItem.setStatusTip(
|
||||
MainWindow.trUtf8('Choose System language, if available'))
|
||||
for item in self.LanguageItem:
|
||||
self.LanguageItem[item].setText(self.LanguageItem[item].objectName())
|
||||
self.LanguageItem[item].setStatusTip(
|
||||
MainWindow.trUtf8('Set the interface language to %1').arg(self.LanguageItem[item].objectName()))
|
||||
self.ToolsAddToolItem.setText(MainWindow.trUtf8('Add &Tool...'))
|
||||
self.ToolsAddToolItem.setStatusTip(
|
||||
self.trUtf8('Add an application to the list of tools'))
|
||||
self.action_Preview_Panel.setText(self.trUtf8('&Preview Pane'))
|
||||
self.ModeLiveItem.setText(self.trUtf8('&Live'))
|
||||
MainWindow.trUtf8('Add an application to the list of tools'))
|
||||
self.action_Preview_Panel.setText(MainWindow.trUtf8('&Preview Pane'))
|
||||
self.ModeLiveItem.setText(MainWindow.trUtf8('&Live'))
|
||||
|
||||
|
||||
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
@ -511,6 +533,11 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
QtCore.QObject.connect(self.FileSaveAsItem,
|
||||
QtCore.SIGNAL(u'triggered()'),
|
||||
self.ServiceManagerContents.onSaveService)
|
||||
#i18n set signals for languages
|
||||
QtCore.QObject.connect(self.AutoLanguageItem,
|
||||
QtCore.SIGNAL(u'toggled(bool)'),
|
||||
self.setAutoLanguage)
|
||||
self.LanguageGroup.triggered.connect(LanguageManager.setLanguage)
|
||||
#warning cyclic dependency
|
||||
#RenderManager needs to call ThemeManager and
|
||||
#ThemeManager needs to call RenderManager
|
||||
@ -552,6 +579,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
||||
log.info(u'Load data from Settings')
|
||||
self.settingsForm.postSetUp()
|
||||
|
||||
#i18n
|
||||
def setAutoLanguage(self, value):
|
||||
self.LanguageGroup.setEnabled(not value)
|
||||
LanguageManager.__AutoLanguage__ = value
|
||||
LanguageManager.setLanguage(self.LanguageGroup.checkedAction())
|
||||
|
||||
def versionCheck(self, version):
|
||||
"""
|
||||
Checks the version of the Application called from openlp.pyw
|
||||
|
@ -151,5 +151,6 @@ def variant_to_unicode(variant):
|
||||
|
||||
from registry import Registry
|
||||
from confighelper import ConfigHelper
|
||||
from languagemanager import LanguageManager
|
||||
|
||||
__all__ = [u'Registry', u'ConfigHelper', u'AppLocation', u'check_latest_version']
|
||||
__all__ = [u'Registry', u'ConfigHelper', u'AppLocation', u'LanguageManager', u'check_latest_version']
|
||||
|
106
openlp/core/utils/languagemanager.py
Normal file
106
openlp/core/utils/languagemanager.py
Normal file
@ -0,0 +1,106 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
|
||||
# Thompson, Jon Tibble, Carsten Tinggaard #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# This program is free software; you can redistribute it and/or modify it #
|
||||
# under the terms of the GNU General Public License as published by the Free #
|
||||
# Software Foundation; version 2 of the License. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||
# more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License along #
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
import logging
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
import os
|
||||
from openlp.core.utils import AppLocation, ConfigHelper
|
||||
#from openlp.core.ui import MainWindow
|
||||
#import i18n_rc
|
||||
|
||||
class LanguageManager(object):
|
||||
"""
|
||||
Helper for Language selection
|
||||
"""
|
||||
__qmList__ = None
|
||||
__AutoLanguage__ = None
|
||||
|
||||
@staticmethod
|
||||
def getTranslator(language):
|
||||
if LanguageManager.__AutoLanguage__ is True:
|
||||
language = QtCore.QLocale.system().name()
|
||||
lang_Path = AppLocation.get_directory(AppLocation.AppDir)
|
||||
lang_Path = os.path.join(lang_Path, u'resources', u'i18n')
|
||||
appTranslator = QtCore.QTranslator()
|
||||
if appTranslator.load("openlp_" + language, lang_Path):
|
||||
return appTranslator
|
||||
|
||||
@staticmethod
|
||||
def findQmFiles():
|
||||
trans_dir = AppLocation.get_directory(AppLocation.AppDir)
|
||||
trans_dir = QtCore.QDir(os.path.join(trans_dir, u'resources', u'i18n'))
|
||||
fileNames = trans_dir.entryList(QtCore.QStringList("*.qm"),
|
||||
QtCore.QDir.Files, QtCore.QDir.Name)
|
||||
for i in fileNames:
|
||||
fileNames.replaceInStrings(i, trans_dir.filePath(i))
|
||||
return fileNames
|
||||
|
||||
@staticmethod
|
||||
def languageName(qmFile):
|
||||
translator = QtCore.QTranslator()
|
||||
translator.load(qmFile)
|
||||
|
||||
return translator.translate(u'MainWindow', u'English')
|
||||
|
||||
@staticmethod
|
||||
def getLanguage():
|
||||
language = ConfigHelper.get_registry().get_value(u'general', u'language', u'[en]')
|
||||
print "getLanguage %s" % language
|
||||
regEx = QtCore.QRegExp("^\[(.*)\]")
|
||||
if regEx.exactMatch(language):
|
||||
LanguageManager.__AutoLanguage__ = True
|
||||
language = regEx.cap(1)
|
||||
return language
|
||||
|
||||
@staticmethod
|
||||
def setLanguage(action):
|
||||
actionName = u'%s' % action.objectName()
|
||||
qmList = LanguageManager.getQmList()
|
||||
if LanguageManager.__AutoLanguage__ == True:
|
||||
language = u'[%s]' % qmList[actionName]
|
||||
else:
|
||||
language = u'%s' % qmList[actionName]
|
||||
print "setLanguage: %s" % language
|
||||
ConfigHelper.set_config(u'general', u'language', language)
|
||||
QtGui.QMessageBox.information(None,
|
||||
u'Language', u'After restart new Language settings will be used.')
|
||||
|
||||
@staticmethod
|
||||
def initQmList():
|
||||
LanguageManager.__qmList__ = {}
|
||||
qmFiles = LanguageManager.findQmFiles()
|
||||
for i, qmf in enumerate(qmFiles):
|
||||
regEx = QtCore.QRegExp("^.*openlp_(.*).qm")
|
||||
if regEx.exactMatch(qmf):
|
||||
langName = regEx.cap(1)
|
||||
LanguageManager.__qmList__[u'%i %s' % (i, LanguageManager.languageName(qmf))] = langName
|
||||
|
||||
@staticmethod
|
||||
def getQmList():
|
||||
if LanguageManager.__qmList__ == None:
|
||||
LanguageManager.initQmList()
|
||||
return LanguageManager.__qmList__
|
||||
|
BIN
resources/i18n/openlp_af.qm
Normal file
BIN
resources/i18n/openlp_af.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_de.qm
Normal file
BIN
resources/i18n/openlp_de.qm
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
resources/i18n/openlp_en_GB.qm
Normal file
BIN
resources/i18n/openlp_en_GB.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_en_ZA.qm
Normal file
BIN
resources/i18n/openlp_en_ZA.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_es.qm
Normal file
BIN
resources/i18n/openlp_es.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_hu.qm
Normal file
BIN
resources/i18n/openlp_hu.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_ko.qm
Normal file
BIN
resources/i18n/openlp_ko.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_nb.qm
Normal file
BIN
resources/i18n/openlp_nb.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_pt_BR.qm
Normal file
BIN
resources/i18n/openlp_pt_BR.qm
Normal file
Binary file not shown.
BIN
resources/i18n/openlp_sv.qm
Normal file
BIN
resources/i18n/openlp_sv.qm
Normal file
Binary file not shown.
@ -36,10 +36,26 @@
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
from optparse import OptionParser
|
||||
import urllib
|
||||
from PyQt4 import QtCore
|
||||
|
||||
ignore_pathes = ["./scripts", "./openlp/core/test"]
|
||||
ignore_files = ["setup.py"]
|
||||
|
||||
translation_path = "http://pootle.projecthq.biz/export/openlp/"
|
||||
translations = [ "af"
|
||||
, "en_ZA"
|
||||
, "en_GB"
|
||||
, "de"
|
||||
, "hu"
|
||||
, "ko"
|
||||
, "nb"
|
||||
, "pt_BR"
|
||||
, "es"
|
||||
, "sv"]
|
||||
|
||||
|
||||
|
||||
def write_file(filename, stringlist):
|
||||
content = u''
|
||||
for line in stringlist:
|
||||
@ -49,6 +65,48 @@ def write_file(filename, stringlist):
|
||||
file.close()
|
||||
|
||||
def main():
|
||||
# Set up command line options.
|
||||
usage = u'Usage: %prog [options]'
|
||||
parser = OptionParser(usage=usage)
|
||||
parser.add_option("-d", "--download-ts", action="store_true", dest="download",
|
||||
help="Load languages from Pootle Server")
|
||||
parser.add_option("-p", "--prepare", action="store_true", dest="prepare",
|
||||
help="preparation (generate pro file)")
|
||||
parser.add_option("-u", "--update", action="store_true", dest="update",
|
||||
help="update translation files")
|
||||
parser.add_option("-g", "--generate", action="store_true", dest="generate",
|
||||
help="generate qm files")
|
||||
parser.add_option("-a", "--all", action="store_true", dest="all",
|
||||
help="proceed all options")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
qt_args = []
|
||||
if options.download:
|
||||
downloadTranslations()
|
||||
elif options.prepare:
|
||||
preparation()
|
||||
elif options.update:
|
||||
update()
|
||||
elif options.generate:
|
||||
generate()
|
||||
elif options.all:
|
||||
all()
|
||||
else:
|
||||
pass
|
||||
|
||||
def downloadTranslations():
|
||||
print "download()"
|
||||
for language in translations:
|
||||
filename = os.path.join('..','resources', 'i18n', "openlp_%s.ts" % language)
|
||||
print filename
|
||||
page = urllib.urlopen("%s%s.ts" % (translation_path, language))
|
||||
content = page.read().decode("utf8")
|
||||
page.close()
|
||||
file = open(filename, u'w')
|
||||
file.write(content.encode('utf8'))
|
||||
file.close()
|
||||
|
||||
def preparation():
|
||||
stringlist = []
|
||||
start_dir = os.path.join(u'..')
|
||||
for root, dirs, files in os.walk(start_dir):
|
||||
@ -73,10 +131,6 @@ def main():
|
||||
if cond == True:
|
||||
continue
|
||||
|
||||
# if file.endswith(u'.ui'):
|
||||
# line = "%s/%s" % (path, file)
|
||||
# print u'Parsing "%s"' % line
|
||||
# stringlist.append("FORMS += %s" % line)
|
||||
if file.endswith(u'.py'):
|
||||
line = "%s/%s" % (path, file)
|
||||
print u'Parsing "%s"' % line
|
||||
@ -95,6 +149,27 @@ def main():
|
||||
write_file(os.path.join(start_dir, u'openlp.pro'), stringlist)
|
||||
print u'done.'
|
||||
|
||||
|
||||
def update():
|
||||
print "update()"
|
||||
updateProcess = QtCore.QProcess()
|
||||
updateProcess.start("pylupdate4 -noobsolete ../openlp.pro")
|
||||
updateProcess.waitForFinished(60000)
|
||||
|
||||
def generate():
|
||||
print "generate()"
|
||||
generateProcess = QtCore.QProcess()
|
||||
generateProcess.start("lrelease ../openlp.pro")
|
||||
generateProcess.waitForFinished(60000)
|
||||
|
||||
def all():
|
||||
print "all()"
|
||||
downloadTranslations()
|
||||
preparation()
|
||||
update()
|
||||
generate()
|
||||
|
||||
|
||||
if __name__ == u'__main__':
|
||||
if os.path.split(os.path.abspath(u'.'))[1] != u'scripts':
|
||||
print u'You need to run this script from the scripts directory.'
|
Loading…
Reference in New Issue
Block a user