ProjectDjangoTagsMenu/DjangoTagsMenuHandler.py

changeset 10
ef5694c0bf3a
parent 9
1b11bf54b3b2
child 11
7e3e1ee102c5
--- a/ProjectDjangoTagsMenu/DjangoTagsMenuHandler.py	Sun Feb 09 18:21:45 2014 +0100
+++ b/ProjectDjangoTagsMenu/DjangoTagsMenuHandler.py	Mon Feb 10 19:21:55 2014 +0100
@@ -7,6 +7,12 @@
 Module implementing the Django tags menu handler.
 """
 
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except NameError:
+    pass
+
 import os
 import datetime
 
@@ -59,9 +65,11 @@
         mainMenu.addMenu(self.__initWebDesignMenu())
         mainMenu.addMenu(self.__initStaticMenu())
         mainMenu.addMenu(self.__initCommentsMenu())
-        # TODO: add internationalization tags/filters menu
+        mainMenu.addMenu(self.__initInternationalizationMenu())
         # TODO: add localization tags/filters menu
+        mainMenu.addMenu(self.__initlocalizationMenu())
         # TODO: add timezone tags/filters menu
+        mainMenu.addMenu(self.__initTimezoneMenu())
     
     def __initTagsMenu(self):
         """
@@ -187,7 +195,6 @@
         
         @return generated menu (QMenu)
         """
-        # TODO: subdivide into even parts a-i,j-r,s-z
         mainMenu = QMenu(self.tr("Filters"))
         
         menu = QMenu(self.tr("A-I"), mainMenu)
@@ -472,7 +479,7 @@
     
     def __initCommentsMenu(self):
         """
-        Private method to initialize the static menu.
+        Private method to initialize the comments menu.
         
         @return generated menu (QMenu)
         """
@@ -516,6 +523,107 @@
         self.__commentsMenu = menu
         return menu
     
+    def __initInternationalizationMenu(self):
+        """
+        Private method to initialize the static menu.
+        
+        @return generated menu (QMenu)
+        """
+        mainMenu = QMenu(self.tr("Internationalization (i18n)"))
+        mainMenu.addAction(
+            self.tr("Load Package"),
+            lambda: self.__applyTemplate("loadi18n"))
+        mainMenu.addSeparator()
+        
+        menu = QMenu(self.tr("Tags"), mainMenu)
+        menu.addAction(
+            self.tr("trans - Translate String or Variable"),
+            lambda: self.__applyTemplate("trans"))
+        menu.addAction(
+            self.tr("trans..as - Translate String into Variable"),
+            lambda: self.__applyTemplate("trans..as"))
+        menu.addSeparator()
+        menu.addAction(
+            self.tr("blocktrans - Translate Block"),
+            lambda: self.__applyTemplate("blocktrans"))
+        menu.addAction(
+            self.tr("blocktrans..with - Translate Block with Attributes"),
+            lambda: self.__applyTemplate("blocktrans..with"))
+        menu.addAction(
+            self.tr("plural - Plural Block"),
+            lambda: self.__applyTemplate("plural"))
+        menu.addAction(
+            self.tr("language - Switch language"),
+            lambda: self.__applyTemplate("language"))
+        menu.addSeparator()
+        menu.addAction(
+            self.tr("get_current_language - Current language"),
+            lambda: self.__applyTemplate("get_current_language"))
+        menu.addAction(
+            self.tr("get_available_languages - Available languages"),
+            lambda: self.__applyTemplate("get_available_languages"))
+        menu.addAction(
+            self.tr("get_current_language_bidi - Current language's"
+                    " direction"),
+            lambda: self.__applyTemplate("get_current_language_bidi"))
+        menu.addAction(
+            self.tr("get_language_info - Language Information"),
+            lambda: self.__applyTemplate("get_language_info"))
+        menu.addAction(
+            self.tr("get_language_info_list - Language Information for a list"
+                    " of languages"),
+            lambda: self.__applyTemplate("get_language_info_list"))
+        mainMenu.addMenu(menu)
+        
+        menu = QMenu(self.tr("Filters"), mainMenu)
+        menu.addAction(
+            self.tr("language_name - Language name"),
+            lambda: self.__applyTemplate("language_name"))
+        menu.addAction(
+            self.tr("language_name_local - Language name translated"),
+            lambda: self.__applyTemplate("language_name_local"))
+        menu.addAction(
+            self.tr("bidi - Language's direction"),
+            lambda: self.__applyTemplate("bidi"))
+        mainMenu.addMenu(menu)
+        
+        self.__internationalizationMenu = mainMenu
+        return mainMenu
+    
+    def __initlocalizationMenu(self):
+        """
+        Private method to initialize the static menu.
+        
+        @return generated menu (QMenu)
+        """
+        mainMenu = QMenu(self.tr("Localization (l10n)"))
+        mainMenu.addAction(
+            self.tr("Load Package"),
+            lambda: self.__applyTemplate("loadl10n"))
+        mainMenu.addSeparator()
+        
+        menu = QMenu(self.tr("Tags"), mainMenu)
+        
+        menu = QMenu(self.tr("Filters"), mainMenu)
+        
+        self.__localizationMenu = mainMenu
+        return mainMenu
+    
+    def __initTimezoneMenu(self):
+        """
+        Private method to initialize the static menu.
+        
+        @return generated menu (QMenu)
+        """
+        menu = QMenu(self.tr("Timezone (tz)"))
+        menu.addAction(
+            self.tr("Load Package"),
+            lambda: self.__applyTemplate("loadtz"))
+        menu.addSeparator()
+        
+        self.__timezoneMenu = menu
+        return menu
+    
     def __findTemplateTag(self):
         """
         Private slot to find a template tag and insert its text.
@@ -1250,7 +1358,7 @@
                         self.tr("Comment File"),
                         self.tr("""<p>The file <b>{0}</b> could not be"""
                                 """ read.</p><p>Reason: {1}</p>""").format(
-                                str(err)))
+                            str(err)))
         elif tag == "singlelinecommentdatetime":
             templateText = '{{# {0} by {1} #}}'.format(
                 datetime.datetime.now().isoformat().split(),
@@ -1265,10 +1373,119 @@
                 templateText = '<!--{0}-->'.format(tag)
                 replace = True
         
-        # TODO: add internationalization tags/filters
+        ####################################################
+        ## Internationalization                           ##
+        ####################################################
+        
+        elif tag == "loadi18n":
+            templateText = '{% load i18n %}'
+        ## Tags ##
+        elif tag == "trans":
+            if ' ' in selectedText:
+                selectedText = '"{0}"'.format(selectedText)
+            templateText = '{{% trans {0} %}}'.format(selectedText)
+            replace = True
+        elif tag == "trans..as":
+            data, ok = DjangoTagInputDialog.getText(
+                None,
+                self.tr("Translate String into Variable"),
+                [self.tr("Enter variable receiving translation:")],
+                ["translation"])
+            if ok:
+                templateText = '{{% trans "{0}" as {1} %}}'.format(
+                    selectedText, data[0])
+                replace = True
+        elif tag == "blocktrans":
+            templateText = '{{% blocktrans %}}{0}{{% endblocktrans %}}'.format(
+                selectedText)
+            replace = True
+        elif tag == "blocktrans..with":
+            data, ok = DjangoTagInputDialog.getText(
+                None,
+                self.tr("Translate Block with Attributes"),
+                [self.tr("Enter attribute binding expressions"
+                         " (space separated):")],
+                ["myvar1=value1 myvar2=value2"])
+            if ok:
+                templateText = (
+                    '{{% blocktrans with {0} %}}{1}{{% endblocktrans %}}'
+                    .format(data[0], selectedText))
+                replace = True
+        elif tag == "plural":
+            templateText = '{{% plural %}} {0}'.format(selectedText)
+            replace = True
+        elif tag == "language":
+            data, ok = DjangoTagInputDialog.getText(
+                None,
+                self.tr("Switch language"),
+                [self.tr("Enter language:")],
+                ["en"])
+            if ok:
+                templateText = (
+                    "{{% language '{0}' %}}{1}{{% endlanguage %}}"
+                    .format(data[0], selectedText))
+                replace = True
+        elif tag == "get_current_language":
+            templateText = '{% get_current_language as LANGUAGE_CODE %}'
+        elif tag == "get_available_languages":
+            templateText = '{% get_available_languages as LANGUAGES %}'
+        elif tag == "get_current_language_bidi":
+            templateText = '{% get_current_language_bidi as LANGUAGE_BIDI %}'
+        elif tag == "get_language_info":
+            data, ok = DjangoTagInputDialog.getText(
+                None,
+                self.tr("Language Information"),
+                [self.tr("Enter language string or variable (empty for"
+                         " LANGUAGE_CODE):")],
+                ['"en"'])
+            if ok:
+                if data[0]:
+                    templateText = (
+                        '{{% get_language_info for "{0}" as lang %}}'
+                        .format(data[0]))
+                else:
+                    templateText = ("{% get_language_info for LANGUAGE_CODE"
+                                    " as lang %}")
+        elif tag == "get_language_info_list":
+            data, ok = DjangoTagInputDialog.getText(
+                None,
+                self.tr("Language Information for a list of languages"),
+                [self.tr("Enter language list variable (empty for"
+                         " LANGUAGES):")],
+                ["available_languages"])
+            if ok:
+                if data[0]:
+                    templateText = (
+                        '{{% get_language_info_list for {0} as langs %}}'
+                        .format(data[0]))
+                else:
+                    templateText = ("{% get_language_info_list for LANGUAGES"
+                                    " as langs %}")
+        ## Filters ##
+        elif tag == "language_name":
+            templateText = '|language_name'
+        elif tag == "language_name_local":
+            templateText = '|language_name_local'
+        elif tag == "bidi":
+            templateText = '|bidi'
+        
         # TODO: add localization tags/filters
+        ####################################################
+        ## Localization                                   ##
+        ####################################################
+        
+        elif tag == "loadl10n":
+            templateText = '{% load l10n %}'
+        
         # TODO: add timezone tags/filters
         ####################################################
+        ## Timezone                                       ##
+        ####################################################
+        
+        elif tag == "loadtz":
+            templateText = '{% load tz %}'
+        
+        ####################################################
         ## Fallback: return just the tag name             ##
         ####################################################
         

eric ide

mercurial