From c278ff30f0d83278844b96b087aa61d973042278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Wed, 17 Dec 2014 19:00:42 +0100 Subject: [PATCH] Use g.gettext for translations --- TODO | 2 +- conf.py | 4 ++++ default_conf.py | 6 +++++ iwla.py | 39 ++++++++++++++++++++---------- plugins/display/all_visits.py | 9 +++---- plugins/display/referers.py | 41 ++++++++++++++++---------------- plugins/display/top_downloads.py | 13 +++++----- plugins/display/top_hits.py | 11 +++++---- plugins/display/top_pages.py | 13 +++++----- plugins/display/top_visitors.py | 5 ++-- 10 files changed, 87 insertions(+), 56 deletions(-) diff --git a/TODO b/TODO index 85c48e1..c340d87 100644 --- a/TODO +++ b/TODO @@ -6,4 +6,4 @@ Limit hits/pages/downloads by rate Automatic tests Add Licence Free memory as soon as possible -different debug output levels \ No newline at end of file +filter log with domain name diff --git a/conf.py b/conf.py index 22d8e17..d12cd0c 100644 --- a/conf.py +++ b/conf.py @@ -26,3 +26,7 @@ max_hits_displayed = 100 max_downloads_displayed = 100 compress_output_files = ['html', 'css', 'js'] + +# locale = 'fr' +locale = 'fr_FR' +# locale = 'fr_FR.utf8' diff --git a/default_conf.py b/default_conf.py index 5f0b255..c28a4c6 100644 --- a/default_conf.py +++ b/default_conf.py @@ -51,3 +51,9 @@ css_path = ['%s/%s/%s' % (os.path.basename(resources_path[0]), 'css', 'iwla.css' # Extensions to compress in gzip during display build compress_output_files = [] + +# Path to locales files +locales_path = './locales' + +# Default locale (english) +locale = 'en_EN' diff --git a/iwla.py b/iwla.py index 8f9d57a..13f427b 100755 --- a/iwla.py +++ b/iwla.py @@ -10,6 +10,7 @@ import gzip import importlib import argparse import logging +import gettext as g from calendar import monthrange from datetime import date @@ -32,6 +33,7 @@ from display import * # Conf values needed : # analyzed_filename # domain_name +# locales_path # compress_output_files* # # Output files : @@ -130,6 +132,19 @@ class IWLA(object): self.logger = logging.getLogger(self.__class__.__name__) self.logger.info('==> Start') + # print conf.locales_path + # print conf.locale + #print g.find('iwla', localedir=conf.locales_path, all=False) + # print g.find('iwla', localedir=conf.locales_path, languages=[conf.locale], all=True) + #g.install('iwla', localedir=conf.locales_path) + t = g.translation('iwla', localedir=conf.locales_path, languages=[conf.locale]) + self._ = t.gettext + #t.install() + # g.install('iwla', localedir=conf.locales_path, names=conf.locale) + + print(self._('Statistics')) + # print(_('Statistics')) + def getVersion(self): return IWLA.IWLA_VERSION @@ -338,13 +353,13 @@ class IWLA(object): def _generateDisplayDaysStats(self): cur_time = self.meta_infos['last_time'] - title = 'Stats %d/%02d' % (cur_time.tm_year, cur_time.tm_mon) + title = '%s %d/%02d' % (g.gettext('Statistics'), cur_time.tm_year, cur_time.tm_mon) filename = self.getCurDisplayPath('index.html') self.logger.info('==> Generate display (%s)' % (filename)) page = self.display.createPage(title, filename, conf.css_path) _, nb_month_days = monthrange(cur_time.tm_year, cur_time.tm_mon) - days = self.display.createBlock(DisplayHTMLBlockTableWithGraph, 'By day', ['Day', 'Visits', 'Pages', 'Hits', 'Bandwidth', 'Not viewed Bandwidth'], None, nb_month_days, range(1,6)) + days = self.display.createBlock(DisplayHTMLBlockTableWithGraph, g.gettext('By day'), [g.gettext('Day'), g.gettext('Visits'), g.gettext('Pages'), g.gettext('Hits'), g.gettext('Bandwidth'), g.gettext('Not viewed Bandwidth')], None, nb_month_days, range(1,6)) days.setColsCSSClass(['', 'iwla_visit', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', 'iwla_bandwidth']) nb_visits = 0 nb_days = 0 @@ -381,12 +396,12 @@ class IWLA(object): else: average_row = map(lambda(v): 0, row) - average_row[0] = 'Average' + average_row[0] = g.gettext('Average') average_row[4] = bytesToStr(average_row[4]) average_row[5] = bytesToStr(average_row[5]) days.appendRow(average_row) - row[0] = 'Total' + row[0] = g.gettext('Total') row[4] = bytesToStr(row[4]) row[5] = bytesToStr(row[5]) days.appendRow(row) @@ -395,9 +410,9 @@ class IWLA(object): def _generateDisplayMonthStats(self, page, year, month_stats): cur_time = time.localtime() - months_name = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - title = 'Summary %d' % (year) - cols = ['Month', 'Visitors', 'Visits', 'Pages', 'Hits', 'Bandwidth', 'Not viewed Bandwidth', 'Details'] + months_name = ['', g.gettext('Jan'), g.gettext('Feb'), g.gettext('Mar'), g.gettext('Apr'), g.gettext('May'), g.gettext('June'), g.gettext('July'), g.gettext('Aug'), g.gettext('Sep'), g.gettext('Oct'), g.gettext('Nov'), g.gettext('Dec')] + title = '%s %d' % (g.gettext('Summary'), year) + cols = [g.gettext('Month'), g.gettext('Visitors'), g.gettext('Visits'), g.gettext('Pages'), g.gettext('Hits'), g.gettext('Bandwidth'), g.gettext('Not viewed Bandwidth'), g.gettext('Details')] graph_cols=range(1,7) months = self.display.createBlock(DisplayHTMLBlockTableWithGraph, title, cols, None, 12, graph_cols) months.setColsCSSClass(['', 'iwla_visitor', 'iwla_visit', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', 'iwla_bandwidth', '']) @@ -407,7 +422,7 @@ class IWLA(object): full_month = '%s %d' % (months_name[i], year) if i in month_stats.keys(): stats = month_stats[i] - link = 'Details' % (year, i) + link = '%s' % (year, i, g.gettext('Details')) row = [full_month, stats['nb_visitors'], stats['nb_visits'], stats['viewed_pages'], stats['viewed_hits'], stats['viewed_bandwidth'], stats['not_viewed_bandwidth'], link] for j in graph_cols: @@ -424,21 +439,21 @@ class IWLA(object): else: css = 'iwla_curday' months.setCellCSSClass(i-1, 0, css) - total[0] = 'Total' + total[0] = g.gettext('Total') total[5] = bytesToStr(total[5]) total[6] = bytesToStr(total[6]) months.appendRow(total) page.appendBlock(months) def _generateDisplayWholeMonthStats(self): - title = 'Stats for %s' % (conf.domain_name) + title = '%s %s' % (g.gettext('Statistics for'), conf.domain_name) filename = 'index.html' self.logger.info('==> Generate main page (%s)' % (filename)) page = self.display.createPage(title, filename, conf.css_path) - last_update = 'Last update %s
' % (time.strftime('%02d %b %Y %H:%M', time.localtime())) + last_update = '%s %s
' % (g.gettext('Last update'), time.strftime('%02d %b %Y %H:%M', time.localtime())) page.appendBlock(self.display.createBlock(DisplayHTMLRaw, last_update)) for year in sorted(self.meta_infos['stats'].keys(), reverse=True): @@ -669,7 +684,7 @@ if __name__ == '__main__': loglevel = getattr(logging, args.loglevel.upper(), None) if not isinstance(loglevel, int): raise ValueError('Invalid log level: %s' % (args.loglevel)) - + iwla = IWLA(loglevel) required_conf = ['analyzed_filename', 'domain_name'] diff --git a/plugins/display/all_visits.py b/plugins/display/all_visits.py index 18bea36..4873b3f 100644 --- a/plugins/display/all_visits.py +++ b/plugins/display/all_visits.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -41,13 +42,13 @@ class IWLADisplayAllVisits(IPlugin): last_access = sorted(hits.values(), key=lambda t: t['last_access'], reverse=True) - title = time.strftime('All visits - %B %Y', self.iwla.getCurTime()) + title = time.strftime(g.gettext('All visits') + ' - %B %Y', self.iwla.getCurTime()) filename = 'all_visits.html' path = self.iwla.getCurDisplayPath(filename) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'Last seen', ['Host', 'Pages', 'Hits', 'Bandwidth', 'Last seen']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('Last seen'), [g.gettext('Host'), g.gettext('Pages'), g.gettext('Hits'), g.gettext('Bandwidth'), g.gettext('Last seen')]) table.setColsCSSClass(['', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', '']) for super_hit in last_access: @@ -69,8 +70,8 @@ class IWLADisplayAllVisits(IPlugin): display.addPage(page) index = self.iwla.getDisplayIndex() - link = 'All visits' % (filename) - block = index.getBlock('Top visitors') + link = '%s' % (g.gettext('All visits'), filename) + block = index.getBlock(g.gettext('Top visitors')) if block: block.setTitle('%s - %s' % (block.getTitle(), link)) else: diff --git a/plugins/display/referers.py b/plugins/display/referers.py index 6bdb043..29e4bb9 100644 --- a/plugins/display/referers.py +++ b/plugins/display/referers.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -68,17 +69,17 @@ class IWLADisplayReferers(IPlugin): # All referers in a file if self.create_all_referers: - title = time.strftime('Connexion from - %B %Y', cur_time) + title = time.strftime(g.gettext('Connexion from') + ' - %B %Y', cur_time) filename = 'referers.html' path = self.iwla.getCurDisplayPath(filename) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'Connexion from', ['Origin', 'Pages', 'Hits']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('Connexion from'), [g.gettext('Origin'), g.gettext('Pages'), g.gettext('Hits')]) table.setColsCSSClass(['', 'iwla_page', 'iwla_hit']) total_search = [0]*3 - table.appendRow(['Search Engine', '', '']) + table.appendRow(['%s' % (g.gettext('Search Engine')), '', '']) new_list = self.max_referers and top_search_engine_referers[:self.max_referers] or top_search_engine_referers for r,_ in new_list: row = [r, search_engine_referers[r]['pages'], search_engine_referers[r]['hits']] @@ -87,7 +88,7 @@ class IWLADisplayReferers(IPlugin): table.appendRow(row) total_external = [0]*3 - table.appendRow(['External URL', '', '']) + table.appendRow(['%s' % (g.gettext('External URL')), '', '']) new_list = self.max_referers and top_referers[:self.max_referers] or top_referers for r,_ in new_list: row = [generateHTMLLink(r), referers[r]['pages'], referers[r]['hits']] @@ -96,7 +97,7 @@ class IWLADisplayReferers(IPlugin): table.appendRow(row) total_robot = [0]*3 - table.appendRow(['External URL (robot)', '', '']) + table.appendRow(['%s' % (g.gettext('External URL (robot)')), '', '']) new_list = self.max_referers and top_robots_referers[:self.max_referers] or top_robots_referers for r,_ in new_list: row = [generateHTMLLink(r), robots_referers[r]['pages'], robots_referers[r]['hits']] @@ -108,45 +109,45 @@ class IWLADisplayReferers(IPlugin): display.addPage(page) - title = 'Top Referers' + title = g.gettext('Top Referers') if self.create_all_referers: - link = 'All Referers' % (filename) + link = '%s' % (filename, g.gettext('All Referers')) title = '%s - %s' % (title, link) # Top referers in index - table = display.createBlock(DisplayHTMLBlockTable, title, ['Origin', 'Pages', 'Hits']) + table = display.createBlock(DisplayHTMLBlockTable, title, [g.gettext('Origin'), g.gettext('Pages'), g.gettext('Hits')]) table.setColsCSSClass(['', 'iwla_page', 'iwla_hit']) - table.appendRow(['Search Engine', '', '']) + table.appendRow(['%s' % (g.gettext('Search Engine')), '', '']) for r,_ in top_search_engine_referers[:10]: row = [r, search_engine_referers[r]['pages'], search_engine_referers[r]['hits']] total_search[1] -= search_engine_referers[r]['pages'] total_search[2] -= search_engine_referers[r]['hits'] table.appendRow(row) if total_search[1] or total_search[2]: - total_search[0] = 'Others' + total_search[0] = g.gettext('Others') table.appendRow(total_search) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') - table.appendRow(['External URL', '', '']) + table.appendRow(['%s' % (g.gettext('External URL')), '', '']) for r,_ in top_referers[:10]: row = [generateHTMLLink(r), referers[r]['pages'], referers[r]['hits']] total_external[1] -= referers[r]['pages'] total_external[2] -= referers[r]['hits'] table.appendRow(row) if total_external[1] or total_external[2]: - total_external[0] = 'Others' + total_external[0] = g.gettext('Others') table.appendRow(total_external) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') - table.appendRow(['External URL (robot)', '', '']) + table.appendRow(['%s' % (g.gettext('External URL (robot)')), '', '']) for r,_ in top_robots_referers[:10]: row = [generateHTMLLink(r), robots_referers[r]['pages'], robots_referers[r]['hits']] total_robot[1] -= robots_referers[r]['pages'] total_robot[2] -= robots_referers[r]['hits'] table.appendRow(row) if total_robot[1] or total_robot[2]: - total_robot[0] = 'Others' + total_robot[0] = g.gettext('Others') table.appendRow(total_robot) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') @@ -154,14 +155,14 @@ class IWLADisplayReferers(IPlugin): # All key phrases in a file if self.create_all_key_phrases: - title = time.strftime('Key Phrases - %B %Y', cur_time) + title = time.strftime(g.gettext('Key Phrases') + ' - %B %Y', cur_time) filename = 'key_phrases.html' path = self.iwla.getCurDisplayPath(filename) total_search = [0]*2 page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'Top key phrases', ['Key phrase', 'Search']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('Top key phrases'), [g.gettext('Key phrase'), g.gettext('Search')]) table.setColsCSSClass(['', 'iwla_search']) new_list = self.max_key_phrases and top_key_phrases[:self.max_key_phrases] or top_key_phrases for phrase in new_list: @@ -171,19 +172,19 @@ class IWLADisplayReferers(IPlugin): display.addPage(page) - title = 'Top key phrases' + title = g.gettext('Top key phrases') if self.create_all_key_phrases: - link = 'All key phrases' % (filename) + link = '%s' % (filename, g.gettext('All key phrases')) title = '%s - %s' % (title, link) # Top key phrases in index - table = display.createBlock(DisplayHTMLBlockTable, title, ['Key phrase', 'Search']) + table = display.createBlock(DisplayHTMLBlockTable, title, [g.gettext('Key phrase'), g.gettext('Search')]) table.setColsCSSClass(['', 'iwla_search']) for phrase in top_key_phrases[:10]: table.appendRow([phrase[0], phrase[1]]) total_search[1] -= phrase[1] if total_search[1]: - total_search[0] = 'Others' + total_search[0] = g.gettext('Others') table.appendRow(total_search) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') index.appendBlock(table) diff --git a/plugins/display/top_downloads.py b/plugins/display/top_downloads.py index 97d7f4a..55a71f5 100644 --- a/plugins/display/top_downloads.py +++ b/plugins/display/top_downloads.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -47,10 +48,10 @@ class IWLADisplayTopDownloads(IPlugin): if self.create_all_downloads: filename = 'top_downloads.html' path = self.iwla.getCurDisplayPath(filename) - title = time.strftime('All Downloads - %B %Y', self.iwla.getCurTime()) + title = time.strftime(g.gettext('All Downloads') + ' - %B %Y', self.iwla.getCurTime()) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'All Downloads', ['URI', 'Hit']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('All Downloads'), [g.gettext('URI'), g.gettext('Hit')]) table.setColsCSSClass(['', 'iwla_hit']) total_entrance = [0]*2 @@ -62,21 +63,21 @@ class IWLADisplayTopDownloads(IPlugin): display.addPage(page) - title = 'Top Downloads' + title = g.gettext('Top Downloads') if self.create_all_downloads: - link = 'All Downloads' % (filename) + link = '%s' % (filename, g.gettext('All Downloads')) title = '%s - %s' % (title, link) # Top in index index = self.iwla.getDisplayIndex() - table = display.createBlock(DisplayHTMLBlockTable, title, ['URI', 'Hits']) + table = display.createBlock(DisplayHTMLBlockTable, title, [g.gettext('URI'), g.gettext('Hits')]) table.setColsCSSClass(['', 'iwla_hit']) for (uri, entrance) in top_downloads[:10]: table.appendRow([generateHTMLLink(uri), entrance]) total_entrance[1] -= entrance if total_entrance[1]: - total_entrance[0] = 'Others' + total_entrance[0] = g.gettext('Others') table.appendRow(total_entrance) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') index.appendBlock(table) diff --git a/plugins/display/top_hits.py b/plugins/display/top_hits.py index bf9496d..230ffa0 100644 --- a/plugins/display/top_hits.py +++ b/plugins/display/top_hits.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -45,12 +46,12 @@ class IWLADisplayTopHits(IPlugin): # All in a file if self.create_all_hits: - title = time.strftime('All Hits - %B %Y', self.iwla.getCurTime()) + title = time.strftime(g.gettext('All Hits') + ' - %B %Y', self.iwla.getCurTime()) filename = 'top_hits.html' path = self.iwla.getCurDisplayPath(filename) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'All Hits', ['URI', 'Entrance']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('All Hits'), [g.gettext('URI'), g.gettext('Entrance')]) table.setColsCSSClass(['', 'iwla_hit']) total_hits = [0]*2 new_list = self.max_hits and top_hits[:self.max_hits] or top_hits @@ -63,19 +64,19 @@ class IWLADisplayTopHits(IPlugin): title = 'Top Hits' if self.create_all_hits: - link = 'All Hits' % (filename) + link = '%s' % (filename, g.gettext('All Hits')) title = '%s - %s' % (title, link) # Top in index index = self.iwla.getDisplayIndex() - table = display.createBlock(DisplayHTMLBlockTable, title, ['URI', 'Entrance']) + table = display.createBlock(DisplayHTMLBlockTable, title, [g.gettext('URI'), g.gettext('Entrance')]) table.setColsCSSClass(['', 'iwla_hit']) for (uri, entrance) in top_hits[:10]: table.appendRow([generateHTMLLink(uri), entrance]) total_hits[1] -= entrance if total_hits[1]: - total_hits[0] = 'Others' + total_hits[0] = g.gettext('Others') table.appendRow(total_hits) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') index.appendBlock(table) diff --git a/plugins/display/top_pages.py b/plugins/display/top_pages.py index b41ef43..a7af675 100644 --- a/plugins/display/top_pages.py +++ b/plugins/display/top_pages.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -45,12 +46,12 @@ class IWLADisplayTopPages(IPlugin): # All in a page if self.create_all_pages: - title = time.strftime('All Pages - %B %Y', self.iwla.getCurTime()) + title = time.strftime(g.gettext('All Pages') + ' - %B %Y', self.iwla.getCurTime()) filename = 'top_pages.html' path = self.iwla.getCurDisplayPath(filename) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) - table = display.createBlock(DisplayHTMLBlockTable, 'All Pages', ['URI', 'Entrance']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('All Pages'), [g.gettext('URI'), g.gettext('Entrance')]) table.setColsCSSClass(['', 'iwla_hit']) total_hits = [0]*2 new_list = self.max_pages and top_pages[:self.max_pages] or top_pages @@ -61,21 +62,21 @@ class IWLADisplayTopPages(IPlugin): display.addPage(page) - title = 'Top Pages' + title = g.gettext('Top Pages') if self.create_all_pages: - link = 'All Pages' % (filename) + link = '%s' % (filename, g.gettext('All Pages')) title = '%s - %s' % (title, link) # Top in index index = self.iwla.getDisplayIndex() - table = display.createBlock(DisplayHTMLBlockTable, title, ['URI', 'Entrance']) + table = display.createBlock(DisplayHTMLBlockTable, title, [g.gettext('URI'), g.gettext('Entrance')]) table.setColsCSSClass(['', 'iwla_hit']) for (uri, entrance) in top_pages[:10]: table.appendRow([generateHTMLLink(uri), entrance]) total_hits[1] -= entrance if total_hits[1]: - total_hits[0] = 'Others' + total_hits[0] = g.gettext('Others') table.appendRow(total_hits) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') index.appendBlock(table) diff --git a/plugins/display/top_visitors.py b/plugins/display/top_visitors.py index 4562980..cf90aef 100644 --- a/plugins/display/top_visitors.py +++ b/plugins/display/top_visitors.py @@ -1,4 +1,5 @@ import time +import gettext as g from iwla import IWLA from iplugin import IPlugin @@ -49,7 +50,7 @@ class IWLADisplayTopVisitors(IPlugin): top_visitors = [hits[h[0]] for h in top_bandwidth[:10]] index = self.iwla.getDisplayIndex() - table = display.createBlock(DisplayHTMLBlockTable, 'Top visitors', ['Host', 'Pages', 'Hits', 'Bandwidth', 'Last seen']) + table = display.createBlock(DisplayHTMLBlockTable, g.gettext('Top visitors'), [g.gettext('Host'), g.gettext('Pages'), g.gettext('Hits'), g.gettext('Bandwidth'), g.gettext('Last seen')]) table.setColsCSSClass(['', 'iwla_page', 'iwla_hit', 'iwla_bandwidth', '']) for super_hit in top_visitors: address = super_hit['remote_addr'] @@ -69,7 +70,7 @@ class IWLADisplayTopVisitors(IPlugin): total[3] -= super_hit['bandwidth'] table.appendRow(row) if total[1] or total[2] or total[3]: - total[0] = 'Others' + total[0] = g.gettext('Others') total[3] = bytesToStr(total[3]) total[4] = '' table.appendRow(total)