Browse Source

Django i18n in js and hbs

Rafał Pitoń 10 years ago
parent
commit
6d91e6a752

+ 9 - 7
misago/conf/defaults.py

@@ -59,7 +59,8 @@ PIPELINE_JS = {
             'misago/ember/handlebars.runtime-v2.0.0.js',
             'misago/ember/ember.prod-1.9.1.js',
             'misago/ember/ember-data.prod-1.0.0.b14.js',
-            'misago/js/preloadstore.js',
+            'misago/app/preloadstore.js',
+            'misago/app/django-i18n.js',
         ),
         'output_filename': 'misago_lib.js',
     },
@@ -69,17 +70,18 @@ PIPELINE_JS = {
             'misago/ember/handlebars-v2.0.0.js',
             'misago/ember/ember-1.9.1.js',
             'misago/ember/ember-data-1.0.0.b14.js',
-            'misago/js/preloadstore.js',
+            'misago/app/preloadstore.js',
+            'misago/app/django-i18n.js',
         ),
         'output_filename': 'misago_lib_debug.js',
     },
     'misago': {
         'source_filenames': (
-            'misago/js/application.js',
-            'misago/js/router.js',
-            'misago/js/controllers/*.js',
-            'misago/js/views/*.js',
-            'misago/js/templates/*.hbs',
+            'misago/app/application.js',
+            'misago/app/router.js',
+            'misago/app/controllers/*.js',
+            'misago/app/views/*.js',
+            'misago/app/templates/*.hbs',
         ),
         'output_filename': 'misago.js',
     },

+ 12 - 0
misago/core/views.py

@@ -1,4 +1,8 @@
 from django.shortcuts import render
+from django.utils import timezone
+from django.views import i18n
+from django.views.decorators.http import last_modified
+from django.views.decorators.cache import cache_page
 
 from misago.forums.lists import get_forums_list
 from misago.users.online.ranks import get_ranks_online
@@ -9,3 +13,11 @@ def forum_index(request):
         'categories': get_forums_list(request.user),
         'ranks_online': get_ranks_online(request.user),
     })
+
+
+last_modified_date = timezone.now()
+
+@cache_page(86400, key_prefix='js18n')
+@last_modified(lambda req, **kw: last_modified_date)
+def javascript_catalog(request):
+    return i18n.javascript_catalog(request, 'djangojs', None)

+ 5 - 0
misago/project_template/project_name/urls.py

@@ -9,8 +9,13 @@ admin.site.login_form = AdminAuthenticationForm
 
 urlpatterns = patterns('',
     url(r'^', include('misago.urls', namespace='misago')),
+
+    # Javascript translations
+    url(r'^django-i18n.js$', 'misago.core.views.javascript_catalog', name="javascript_catalog"),
+
     # Uncomment next line if you plan to use Django admin for 3rd party apps
     #url(r'^django-admin/', include(admin.site.urls)),
+
     # Uncomment next line if you plan to use browseable API
     #url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
 )

+ 1 - 0
misago/static/misago/js/application.js → misago/static/misago/app/application.js

@@ -2,6 +2,7 @@ window.Misago = Ember.Application.create({
   rootElement: '#main'
 });
 
+
 Ember.Application.initializer({
   name: 'misago-conf',
 

+ 0 - 0
misago/static/misago/js/controllers/application.js → misago/static/misago/app/controllers/application.js


+ 0 - 0
misago/static/misago/js/controllers/footer.js → misago/static/misago/app/controllers/footer.js


+ 0 - 0
misago/static/misago/js/controllers/navbar.js → misago/static/misago/app/controllers/navbar.js


+ 42 - 0
misago/static/misago/app/django-i18n.js

@@ -0,0 +1,42 @@
+/*
+Handlebars helpers for calling djangojs translation functions
+
+gettext = function (msgid) { return msgid; };
+ngettext = function (singular, plural, count) { return (count == 1) ? singular : plural; };
+gettext_noop = function (msgid) { return msgid; };
+pgettext = function (context, msgid) { return msgid; };
+npgettext = function (context, singular, plural, count) { return (count == 1) ? singular : plural; };
+django.interpolate = function (fmt, obj, named);
+*/
+
+Ember.Handlebars.registerBoundHelper('gettext', function(msgid, options) {
+  if (Object.getOwnPropertyNames(options.hash).length > 0) {
+    return interpolate(gettext(msgid), options.hash, true);
+  } else {
+    return gettext(msgid);
+  }
+});
+
+Ember.Handlebars.registerBoundHelper('ngettext', function(singular, plural, count, options) {
+  return interpolate(ngettext(singular, plural, count), options.hash, true);
+});
+
+Ember.Handlebars.registerBoundHelper('gettext_noop', function(msgid, options) {
+  if (Object.getOwnPropertyNames(options.hash).length > 0) {
+    return interpolate(gettext_noop(msgid), options.hash, true);
+  } else {
+    return gettext_noop(msgid);
+  }
+});
+
+Ember.Handlebars.registerBoundHelper('pgettext', function(context, msgid, options) {
+  if (Object.getOwnPropertyNames(options.hash).length > 0) {
+    return interpolate(pgettext(context, msgid), options.hash, true);
+  } else {
+    return pgettext(context, msgid);
+  }
+});
+
+Ember.Handlebars.registerBoundHelper('npgettext', function(context, singular, plural, count, options) {
+  return interpolate(npgettext(context, singular, plural, count), options.hash, true);
+});

+ 0 - 0
misago/static/misago/js/libs/bootstrap-3.1.1.js → misago/static/misago/app/libs/bootstrap-3.1.1.js


+ 0 - 0
misago/static/misago/js/preloadstore.js → misago/static/misago/app/preloadstore.js


+ 0 - 0
misago/static/misago/js/router.js → misago/static/misago/app/router.js


+ 0 - 0
misago/static/misago/js/templates/application.hbs → misago/static/misago/app/templates/application.hbs


+ 0 - 0
misago/static/misago/js/templates/footer.hbs → misago/static/misago/app/templates/footer.hbs


+ 0 - 0
misago/static/misago/js/templates/index.hbs → misago/static/misago/app/templates/index.hbs


+ 0 - 0
misago/static/misago/js/templates/navbar.hbs → misago/static/misago/app/templates/navbar.hbs


+ 2 - 0
misago/templates/misago/base.html

@@ -31,6 +31,8 @@
 
     <section id="main"></section>
 
+    <script type="text/javascript" src="{% url 'javascript_catalog' %}"></script>
+
     {% if MISAGO_JS_DEBUG %}
       {% javascript "misago_lib_debug" %}
     {% else %}