File: //home/arjun/projects/buyercall/buyercall/lib/i18n.py
from os import path
from flask_webpack import Webpack
from flask_babel import get_locale
import time
class I18nWebpack(Webpack):
def __init__(self, *args, **kwargs):
super(I18nWebpack, self).__init__(*args, **kwargs)
def _add_prefix(self, f, ext):
head, tail = path.split(f)
languages = list({get_locale().language, 'en'})
for lang in languages:
candidate = path.join(head, '{}.{}'.format(lang, tail))
if '{}.{}'.format(candidate, ext) in self.assets:
return candidate
return f
def javascript_tag(self, *args):
"""
Convenience tag to output 1 or more javascript tags.
:param args: 1 or more javascript file names
:return: Script tag(s) containing the asset
"""
tags = []
i18n_args = [self._add_prefix(f, 'js') for f in args]
for arg in i18n_args:
asset_path = super(I18nWebpack, self).asset_url_for('{0}'.format(arg))
if asset_path:
tags.append('<script src="{0}"></script>'.format(asset_path))
return '\n'.join(tags)
def stylesheet_tag(self, *args):
"""
Convenience tag to output 1 or more stylesheet tags.
:param args: 1 or more stylesheet file names
:return: Link tag(s) containing the asset
"""
tags = []
i18n_args = [self._add_prefix(f, 'css') for f in args]
for arg in i18n_args:
asset_path = super(I18nWebpack, self).asset_url_for('{0}'.format(arg))
if asset_path:
tags.append(
'<link rel="stylesheet" href="{0}">'.format(asset_path))
return '\n'.join(tags)
def asset_url_for(self, *arg):
param = '?timestamp={}'.format(time.time()) # will result in something like ?timestamp=1355563265.81
_prefix = 'buyercall/assets/'
arg = tuple(_prefix + str(item) for item in arg)
return "{}".format(super(I18nWebpack, self).asset_url_for(*arg))