Explorar o código

HUE-762 [jb] Templates Internationalization

Created message bundles for all the templates
Enrico Berti %!s(int64=13) %!d(string=hai) anos
pai
achega
d890c2dff8

+ 2 - 0
apps/jobbrowser/babel.cfg

@@ -0,0 +1,2 @@
+[python: src/jobbrowser/**.py]
+[mako: src/jobbrowser/templates/**.mako]

+ 562 - 0
apps/jobbrowser/src/jobbrowser/locale/django.pot

@@ -0,0 +1,562 @@
+# Translations template for PROJECT.
+# Copyright (C) 2012 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2012-07-02 22:40+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/jobbrowser/templates/attempt.mako:22
+#: src/jobbrowser/templates/attempt.mako:24
+#, python-format
+msgid "Task Attempt: %(attemptId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:29
+#: src/jobbrowser/templates/task.mako:59
+msgid "Attempt ID"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:31
+msgid "Task"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:32
+#: src/jobbrowser/templates/attempt.mako:76
+#: src/jobbrowser/templates/job.mako:42
+msgid "View this task"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:34
+#: src/jobbrowser/templates/task.mako:32
+msgid "Job"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:35
+#: src/jobbrowser/templates/attempt.mako:84
+#: src/jobbrowser/templates/jobs.mako:92 src/jobbrowser/templates/task.mako:33
+#: src/jobbrowser/templates/task.mako:111
+msgid "View this job"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:36
+#: src/jobbrowser/templates/job.mako:93 src/jobbrowser/templates/job.mako:199
+#: src/jobbrowser/templates/jobs.mako:62 src/jobbrowser/templates/task.mako:34
+#: src/jobbrowser/templates/task.mako:118
+#: src/jobbrowser/templates/tasks.mako:74
+msgid "Status"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:55
+#: src/jobbrowser/templates/job.mako:128 src/jobbrowser/templates/task.mako:50
+msgid "Metadata"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:56
+#: src/jobbrowser/templates/job.mako:129 src/jobbrowser/templates/task.mako:51
+msgid "Counters"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:57
+msgid "Logs"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:65
+#: src/jobbrowser/templates/job.mako:166 src/jobbrowser/templates/job.mako:209
+#: src/jobbrowser/templates/jobbrowser_components.mako:51
+#: src/jobbrowser/templates/task.mako:97
+#: src/jobbrowser/templates/tasktrackers.mako:26
+msgid "Name"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:66
+#: src/jobbrowser/templates/job.mako:167 src/jobbrowser/templates/job.mako:210
+#: src/jobbrowser/templates/jobbrowser_components.mako:27
+#: src/jobbrowser/templates/task.mako:98
+msgid "Value"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:71
+msgid "Attempt id"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:75
+#: src/jobbrowser/templates/task.mako:102
+msgid "Task id"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:79
+msgid "Task Type"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:83
+#: src/jobbrowser/templates/task.mako:110
+msgid "JobId"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:87
+#: src/jobbrowser/templates/task.mako:61 src/jobbrowser/templates/task.mako:114
+#: src/jobbrowser/templates/tasks.mako:75
+msgid "State"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:91
+#: src/jobbrowser/templates/task.mako:63 src/jobbrowser/templates/task.mako:122
+#: src/jobbrowser/templates/tasks.mako:76
+msgid "Start Time"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:95
+msgid "Finish Time"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:99
+#: src/jobbrowser/templates/task.mako:60 src/jobbrowser/templates/task.mako:134
+#: src/jobbrowser/templates/tasks.mako:73
+msgid "Progress"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:103
+#: src/jobbrowser/templates/task.mako:62
+msgid "Task Tracker"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:107
+#: src/jobbrowser/templates/task.mako:66
+msgid "Phase"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:111
+#: src/jobbrowser/templates/task.mako:65
+msgid "Output Size"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:135
+msgid "task diagnostic log"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:141
+msgid "stdout"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:147
+msgid "stderr"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:153
+msgid "syslog"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:31 src/jobbrowser/templates/job.mako:127
+msgid "Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:32 src/jobbrowser/templates/task.mako:106
+#: src/jobbrowser/templates/tasks.mako:72
+msgid "Type"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:42 src/jobbrowser/templates/jobs.mako:92
+#: src/jobbrowser/templates/task.mako:70 src/jobbrowser/templates/task.mako:88
+msgid "View"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:81 src/jobbrowser/templates/job.mako:84
+#, python-format
+msgid "Job: %(jobId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:89
+msgid "Job ID"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:91 src/jobbrowser/templates/job.mako:175
+#: src/jobbrowser/templates/jobs.mako:63
+msgid "User"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:104
+msgid "Kill Job"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:105 src/jobbrowser/templates/jobs.mako:95
+msgid "Kill this job"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:108
+msgid "Output"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:134
+msgid "Maps:"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:135
+msgid "Reduces:"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:139
+msgid "View Failed Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:140
+msgid "Failed Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:148
+msgid "View All Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:150
+msgid "Recent Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:161
+msgid "Filter: "
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:161 src/jobbrowser/templates/jobs.mako:49
+#: src/jobbrowser/templates/tasks.mako:56
+msgid "Text Filter"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:171
+#: src/jobbrowser/templates/tasktracker.mako:27
+msgid "ID"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:179 src/jobbrowser/templates/jobs.mako:64
+msgid "Maps"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:183 src/jobbrowser/templates/jobs.mako:65
+msgid "Reduces"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:187
+msgid "Started"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:191
+msgid "Ended"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:195 src/jobbrowser/templates/jobs.mako:68
+msgid "Duration"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:206
+msgid "Raw configuration:"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:26
+msgid "Counter Name"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:52
+msgid "Maps Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:53
+msgid "Reduces Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:54
+msgid "Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:32 src/jobbrowser/templates/jobs.mako:34
+#: src/jobbrowser/templates/jobs.mako:107
+msgid "Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:37
+msgid "Filter jobs:"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:40
+msgid "All States"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:41
+msgid "Running"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:42
+msgid "Completed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:43
+msgid "Failed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:44
+msgid "Killed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:47
+msgid "User Name Filter"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:56
+msgid "There were no jobs that match your search criteria."
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:61
+msgid "Name / Id"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:66
+msgid "Queue"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:67
+msgid "Priority"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:69
+msgid "Date"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:80 src/jobbrowser/templates/jobs.mako:83
+#, python-format
+msgid "Show only %(status)s jobs"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:95
+msgid "Kill"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:109
+msgid "Welcome to the Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:111
+msgid "There aren't any jobs running. Let's fix that."
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:113
+msgid "Launch the Job Designer"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:116
+msgid "Launch Beeswax"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:22 src/jobbrowser/templates/task.mako:25
+#, python-format
+msgid "Job Task: %(taskId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:30 src/jobbrowser/templates/tasks.mako:71
+msgid "Task ID"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:49 src/jobbrowser/templates/tasks.mako:98
+msgid "Attempts"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:64 src/jobbrowser/templates/tasks.mako:77
+msgid "End Time"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:67
+msgid "Shuffle Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:68
+msgid "Sort Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:69
+msgid "Map Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:87
+msgid "View this attempt"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:126
+msgid "Execution Start Time"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:130
+msgid "Execution Finish Time"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:24
+#, python-format
+msgid "Task View: Job: %(jobId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:32
+#, python-format
+msgid "Task View: Job: %(jobId)s"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:35
+msgid "Filter tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:38
+msgid "All states"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:39
+msgid "succeeded"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:40
+msgid "running"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:41
+msgid "failed"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:42
+msgid "killed"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:43
+msgid "pending"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:48
+msgid "All types"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:49
+msgid "maps"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:50
+msgid "reduces"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:51
+msgid "cleanups"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:52
+msgid "setups"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:56
+msgid "Text filter"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:66
+msgid "There were no tasks that match your search criteria."
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:78
+msgid "View Attempts"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:91
+#, python-format
+msgid "Show only %(state)s tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:22
+#, python-format
+msgid "Tracker: %(trackerId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:24
+#, python-format
+msgid "Tracker at %(trackerHost)s on port %(trackerPort)s"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:29
+msgid "Last heard from at"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:34
+msgid "Memory Metrics"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:37
+msgid "Total virtual memory:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:39
+msgid "Total physical memory:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:41
+msgid "Available space:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:46
+msgid "Map and Reduce"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:49
+msgid "Map count:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:51
+msgid "Reduce count:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:53
+msgid "Max map tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:55
+msgid "Max reduce tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:21
+msgid "Task Trackers - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:27
+msgid "Host"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:28
+msgid "Port"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:29
+msgid "Last Seen"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:30
+msgid "Available Space"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:31
+msgid "Failure Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:32
+msgid "Map Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:33
+msgid "Reduce Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:34
+msgid "Max Map Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:35
+msgid "Max Reduce Tasks"
+msgstr ""
+

+ 562 - 0
apps/jobbrowser/src/jobbrowser/locale/en_US/LC_MESSAGES/django.po

@@ -0,0 +1,562 @@
+# English (United States) translations for PROJECT.
+# Copyright (C) 2012 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2012-07-02 22:40+0200\n"
+"PO-Revision-Date: 2012-07-02 21:29+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: en_US <LL@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: src/jobbrowser/templates/attempt.mako:22
+#: src/jobbrowser/templates/attempt.mako:24
+#, python-format
+msgid "Task Attempt: %(attemptId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:29
+#: src/jobbrowser/templates/task.mako:59
+msgid "Attempt ID"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:31
+msgid "Task"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:32
+#: src/jobbrowser/templates/attempt.mako:76
+#: src/jobbrowser/templates/job.mako:42
+msgid "View this task"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:34
+#: src/jobbrowser/templates/task.mako:32
+msgid "Job"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:35
+#: src/jobbrowser/templates/attempt.mako:84
+#: src/jobbrowser/templates/jobs.mako:92 src/jobbrowser/templates/task.mako:33
+#: src/jobbrowser/templates/task.mako:111
+msgid "View this job"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:36
+#: src/jobbrowser/templates/job.mako:93 src/jobbrowser/templates/job.mako:199
+#: src/jobbrowser/templates/jobs.mako:62 src/jobbrowser/templates/task.mako:34
+#: src/jobbrowser/templates/task.mako:118
+#: src/jobbrowser/templates/tasks.mako:74
+msgid "Status"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:55
+#: src/jobbrowser/templates/job.mako:128 src/jobbrowser/templates/task.mako:50
+msgid "Metadata"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:56
+#: src/jobbrowser/templates/job.mako:129 src/jobbrowser/templates/task.mako:51
+msgid "Counters"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:57
+msgid "Logs"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:65
+#: src/jobbrowser/templates/job.mako:166 src/jobbrowser/templates/job.mako:209
+#: src/jobbrowser/templates/jobbrowser_components.mako:51
+#: src/jobbrowser/templates/task.mako:97
+#: src/jobbrowser/templates/tasktrackers.mako:26
+msgid "Name"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:66
+#: src/jobbrowser/templates/job.mako:167 src/jobbrowser/templates/job.mako:210
+#: src/jobbrowser/templates/jobbrowser_components.mako:27
+#: src/jobbrowser/templates/task.mako:98
+msgid "Value"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:71
+msgid "Attempt id"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:75
+#: src/jobbrowser/templates/task.mako:102
+msgid "Task id"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:79
+msgid "Task Type"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:83
+#: src/jobbrowser/templates/task.mako:110
+msgid "JobId"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:87
+#: src/jobbrowser/templates/task.mako:61 src/jobbrowser/templates/task.mako:114
+#: src/jobbrowser/templates/tasks.mako:75
+msgid "State"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:91
+#: src/jobbrowser/templates/task.mako:63 src/jobbrowser/templates/task.mako:122
+#: src/jobbrowser/templates/tasks.mako:76
+msgid "Start Time"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:95
+msgid "Finish Time"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:99
+#: src/jobbrowser/templates/task.mako:60 src/jobbrowser/templates/task.mako:134
+#: src/jobbrowser/templates/tasks.mako:73
+msgid "Progress"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:103
+#: src/jobbrowser/templates/task.mako:62
+msgid "Task Tracker"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:107
+#: src/jobbrowser/templates/task.mako:66
+msgid "Phase"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:111
+#: src/jobbrowser/templates/task.mako:65
+msgid "Output Size"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:135
+msgid "task diagnostic log"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:141
+msgid "stdout"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:147
+msgid "stderr"
+msgstr ""
+
+#: src/jobbrowser/templates/attempt.mako:153
+msgid "syslog"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:31 src/jobbrowser/templates/job.mako:127
+msgid "Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:32 src/jobbrowser/templates/task.mako:106
+#: src/jobbrowser/templates/tasks.mako:72
+msgid "Type"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:42 src/jobbrowser/templates/jobs.mako:92
+#: src/jobbrowser/templates/task.mako:70 src/jobbrowser/templates/task.mako:88
+msgid "View"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:81 src/jobbrowser/templates/job.mako:84
+#, python-format
+msgid "Job: %(jobId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:89
+msgid "Job ID"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:91 src/jobbrowser/templates/job.mako:175
+#: src/jobbrowser/templates/jobs.mako:63
+msgid "User"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:104
+msgid "Kill Job"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:105 src/jobbrowser/templates/jobs.mako:95
+msgid "Kill this job"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:108
+msgid "Output"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:134
+msgid "Maps:"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:135
+msgid "Reduces:"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:139
+msgid "View Failed Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:140
+msgid "Failed Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:148
+msgid "View All Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:150
+msgid "Recent Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:161
+msgid "Filter: "
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:161 src/jobbrowser/templates/jobs.mako:49
+#: src/jobbrowser/templates/tasks.mako:56
+msgid "Text Filter"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:171
+#: src/jobbrowser/templates/tasktracker.mako:27
+msgid "ID"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:179 src/jobbrowser/templates/jobs.mako:64
+msgid "Maps"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:183 src/jobbrowser/templates/jobs.mako:65
+msgid "Reduces"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:187
+msgid "Started"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:191
+msgid "Ended"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:195 src/jobbrowser/templates/jobs.mako:68
+msgid "Duration"
+msgstr ""
+
+#: src/jobbrowser/templates/job.mako:206
+msgid "Raw configuration:"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:26
+msgid "Counter Name"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:52
+msgid "Maps Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:53
+msgid "Reduces Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobbrowser_components.mako:54
+msgid "Total"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:32 src/jobbrowser/templates/jobs.mako:34
+#: src/jobbrowser/templates/jobs.mako:107
+msgid "Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:37
+msgid "Filter jobs:"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:40
+msgid "All States"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:41
+msgid "Running"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:42
+msgid "Completed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:43
+msgid "Failed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:44
+msgid "Killed"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:47
+msgid "User Name Filter"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:56
+msgid "There were no jobs that match your search criteria."
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:61
+msgid "Name / Id"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:66
+msgid "Queue"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:67
+msgid "Priority"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:69
+msgid "Date"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:80 src/jobbrowser/templates/jobs.mako:83
+#, python-format
+msgid "Show only %(status)s jobs"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:95
+msgid "Kill"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:109
+msgid "Welcome to the Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:111
+msgid "There aren't any jobs running. Let's fix that."
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:113
+msgid "Launch the Job Designer"
+msgstr ""
+
+#: src/jobbrowser/templates/jobs.mako:116
+msgid "Launch Beeswax"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:22 src/jobbrowser/templates/task.mako:25
+#, python-format
+msgid "Job Task: %(taskId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:30 src/jobbrowser/templates/tasks.mako:71
+msgid "Task ID"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:49 src/jobbrowser/templates/tasks.mako:98
+msgid "Attempts"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:64 src/jobbrowser/templates/tasks.mako:77
+msgid "End Time"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:67
+msgid "Shuffle Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:68
+msgid "Sort Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:69
+msgid "Map Finish"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:87
+msgid "View this attempt"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:126
+msgid "Execution Start Time"
+msgstr ""
+
+#: src/jobbrowser/templates/task.mako:130
+msgid "Execution Finish Time"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:24
+#, python-format
+msgid "Task View: Job: %(jobId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:32
+#, python-format
+msgid "Task View: Job: %(jobId)s"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:35
+msgid "Filter tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:38
+msgid "All states"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:39
+msgid "succeeded"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:40
+msgid "running"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:41
+msgid "failed"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:42
+msgid "killed"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:43
+msgid "pending"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:48
+msgid "All types"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:49
+msgid "maps"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:50
+msgid "reduces"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:51
+msgid "cleanups"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:52
+msgid "setups"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:56
+msgid "Text filter"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:66
+msgid "There were no tasks that match your search criteria."
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:78
+msgid "View Attempts"
+msgstr ""
+
+#: src/jobbrowser/templates/tasks.mako:91
+#, python-format
+msgid "Show only %(state)s tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:22
+#, python-format
+msgid "Tracker: %(trackerId)s - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:24
+#, python-format
+msgid "Tracker at %(trackerHost)s on port %(trackerPort)s"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:29
+msgid "Last heard from at"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:34
+msgid "Memory Metrics"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:37
+msgid "Total virtual memory:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:39
+msgid "Total physical memory:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:41
+msgid "Available space:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:46
+msgid "Map and Reduce"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:49
+msgid "Map count:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:51
+msgid "Reduce count:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:53
+msgid "Max map tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktracker.mako:55
+msgid "Max reduce tasks:"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:21
+msgid "Task Trackers - Job Browser"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:27
+msgid "Host"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:28
+msgid "Port"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:29
+msgid "Last Seen"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:30
+msgid "Available Space"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:31
+msgid "Failure Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:32
+msgid "Map Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:33
+msgid "Reduce Count"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:34
+msgid "Max Map Tasks"
+msgstr ""
+
+#: src/jobbrowser/templates/tasktrackers.mako:35
+msgid "Max Reduce Tasks"
+msgstr ""
+

+ 32 - 31
apps/jobbrowser/src/jobbrowser/templates/attempt.mako

@@ -15,24 +15,25 @@
 ## limitations under the License.
 <%!
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
-${commonheader("Task Attempt: " + attempt.attemptId + ":: Job Browser", "jobbrowser")}
+${commonheader(_('Task Attempt: %(attemptId)s - Job Browser') % dict(attemptId=attempt.attemptId), "jobbrowser")}
 <div class="container-fluid">
-    <h1>Task Attempt: ${attempt.attemptId} :: Job Browser</h1>
+    <h1>${_('Task Attempt: %(attemptId)s - Job Browser') % dict(attemptId=attempt.attemptId)}</h1>
     <div class="row-fluid">
         <div class="span2">
             <div class="well sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">Attempt ID</li>
+                    <li class="nav-header">${_('Attempt ID')}</li>
                     <li>${attempt.attemptId_short}</li>
-                    <li class="nav-header">Task</li>
-                    <li><a href="${url('jobbrowser.views.single_task', jobid=joblnk.jobId, taskid=taskid)}" title="View this task">${task.taskId_short}</a>
+                    <li class="nav-header">${_('Task')}</li>
+                    <li><a href="${url('jobbrowser.views.single_task', jobid=joblnk.jobId, taskid=taskid)}" title="${_('View this task')}">${task.taskId_short}</a>
                     </li>
-                    <li class="nav-header">Job</li>
-                    <li><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="View this job">${joblnk.jobId_short}</a></li>
-                    <li class="nav-header">Status</li>
+                    <li class="nav-header">${_('Job')}</li>
+                    <li><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="${_('View this job')}">${joblnk.jobId_short}</a></li>
+                    <li class="nav-header">${_('Status')}</li>
                     <li>
                         <%
                             status = attempt.state.lower()
@@ -51,9 +52,9 @@ ${commonheader("Task Attempt: " + attempt.attemptId + ":: Job Browser", "jobbrow
 
         <div class="span10">
             <ul class="nav nav-tabs">
-                <li class="active"><a href="#metadata" data-toggle="tab">Metadata</a></li>
-                <li><a href="#counters" data-toggle="tab">Counters</a></li>
-                <li><a href="#logs" data-toggle="tab">Logs</a></li>
+                <li class="active"><a href="#metadata" data-toggle="tab">${_('Metadata')}</a></li>
+                <li><a href="#counters" data-toggle="tab">${_('Counters')}</a></li>
+                <li><a href="#logs" data-toggle="tab">${_('Logs')}</a></li>
             </ul>
 
             <div class="tab-content">
@@ -61,53 +62,53 @@ ${commonheader("Task Attempt: " + attempt.attemptId + ":: Job Browser", "jobbrow
                     <table id="metadataTable" class="table table-striped table-condensed">
                         <thead>
                         <tr>
-                            <th>Name</th>
-                            <th>Value</th>
+                            <th>${_('Name')}</th>
+                            <th>${_('Value')}</th>
                         </tr>
                         </thead>
                         <tbody>
                         <tr>
-                            <td>Attempt id</td>
+                            <td>${_('Attempt id')}</td>
                             <td>${attempt.attemptId}</td>
                         </tr>
                         <tr>
-                            <td>Task id</td>
-                            <td><a href="${url('jobbrowser.views.single_task', jobid=joblnk.jobId, taskid=taskid)}" title="View this task">${task.taskId}</a></td>
+                            <td>${_('Task id')}</td>
+                            <td><a href="${url('jobbrowser.views.single_task', jobid=joblnk.jobId, taskid=taskid)}" title="${_('View this task')}">${task.taskId}</a></td>
                         </tr>
                         <tr>
-                            <td>Task Type</td>
+                            <td>${_('Task Type')}</td>
                             <td>${task.taskType}</td>
                         </tr>
                         <tr>
-                            <td>JobId</td>
-                            <td><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="View this job">${joblnk.jobId}</a></td>
+                            <td>${_('JobId')}</td>
+                            <td><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="${_('View this job')}">${joblnk.jobId}</a></td>
                         </tr>
                         <tr>
-                            <td>State</td>
+                            <td>${_('State')}</td>
                             <td>${attempt.state}</td>
                         </tr>
                         <tr>
-                            <td>Start Time</td>
+                            <td>${_('Start Time')}</td>
                             <td>${attempt.startTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Finish Time</td>
+                            <td>${_('Finish Time')}</td>
                             <td>${attempt.finishTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Progress</td>
+                            <td>${_('Progress')}</td>
                             <td>${"%d" % (attempt.progress * 100)}%</td>
                         </tr>
                         <tr>
-                            <td>Task Tracker</td>
+                            <td>${_('Task Tracker')}</td>
                             <td><a href="/jobbrowser/trackers/${attempt.taskTrackerId}">${attempt.taskTrackerId}</a></td>
                         </tr>
                         <tr>
-                            <td>Phase</td>
+                            <td>${_('Phase')}</td>
                             <td>${attempt.phase}</td>
                         </tr>
                         <tr>
-                            <td>Output Size</td>
+                            <td>${_('Output Size')}</td>
                             <td>${attempt.outputSize}</td>
                         </tr>
                         </tbody>
@@ -115,7 +116,7 @@ ${commonheader("Task Attempt: " + attempt.attemptId + ":: Job Browser", "jobbrow
                 </div>
 
                 <div class="tab-pane" id="counters">
-                    ${comps.task_counters(task.counters)}
+                    ${comps.task_counters(task.counters, _)}
                 </div>
 
                 <div class="tab-pane jt-logs" id="logs">
@@ -131,25 +132,25 @@ ${commonheader("Task Attempt: " + attempt.attemptId + ":: Job Browser", "jobbrow
                               ${ line | h,trim }
                         % endfor
                     </%def>
-                    <h2>task diagnostic log</h2>
+                    <h2>${_('task diagnostic log')}</h2>
                     % if not log_diagnostic:
                             <pre>-- empty --</pre>
                     % else:
                             <pre>${format_log(log_diagnostic)}</pre>
                     % endif
-                    <h2>stdout</h2>
+                    <h2>${_('stdout')}</h2>
                     % if not log_stdout:
                             <pre>-- empty --</pre>
                     % else:
                             <pre>${format_log(log_stdout)}</pre>
                     % endif
-                    <h2>stderr</h2>
+                    <h2>${_('stderr')}</h2>
                     % if not log_stderr:
                             <pre>-- empty --</pre>
                     % else:
                             <pre>${format_log(log_stderr)}</pre>
                     % endif
-                    <h2>syslog</h2>
+                    <h2>${_('syslog')}</h2>
                     % if not log_syslog:
                             <pre>-- empty --</pre>
                     % else:

+ 36 - 35
apps/jobbrowser/src/jobbrowser/templates/job.mako

@@ -21,14 +21,15 @@
   import re
   from desktop.views import commonheader, commonfooter
   from django.template.defaultfilters import urlencode
+  from django.utils.translation import ugettext as _
 %>
 
 <%def name="task_table(tasks)">
     <table class="taskTable table table-striped table-condensed">
         <thead>
         <tr>
-            <th>Tasks</th>
-            <th>Type</th>
+            <th>${_('Tasks')}</th>
+            <th>${_('Type')}</th>
             <th>&nbsp;</th>
         </tr>
         </thead>
@@ -38,7 +39,7 @@
                     <td>${task.taskId_short}</td>
                     <td>${task.taskType}</td>
                     <td>
-                        <a title="View this task" href="${ url('jobbrowser.views.single_task', jobid=job.jobId, taskid=task.taskId) }">View</a>
+                        <a title="${_('View this task')}" href="${ url('jobbrowser.views.single_task', jobid=job.jobId, taskid=task.taskId) }">${_('View')}</a>
                     </td>
                 </tr>
                 % endfor
@@ -77,19 +78,19 @@
         </tr>
     % endfor
 </%def>
-${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
+${commonheader(_('Job: %(jobId)s - Job Browser') % dict(jobId=job.jobId), "jobbrowser")}
 
 <div class="container-fluid">
-    <h1>Job: ${job.jobId} - Job Browser</h1>
+    <h1>${_('Job: %(jobId)s - Job Browser') % dict(jobId=job.jobId)}</h1>
     <div class="row-fluid">
         <div class="span2">
             <div class="well sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">Job ID</li>
+                    <li class="nav-header">${_('Job ID')}</li>
                     <li>${job.jobId}</li>
-                    <li class="nav-header">User</li>
+                    <li class="nav-header">${_('User')}</li>
                     <li>${job.user}</li>
-                    <li class="nav-header">Status</li>
+                    <li class="nav-header">${_('Status')}</li>
                     <li>
                             % if job.status.lower() == 'running' or job.status.lower() == 'pending':
                                 <span class="label label-warning">${job.status.lower()}</span>
@@ -100,11 +101,11 @@ ${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
                             % endif
                     </li>
                     % if job.status.lower() == 'running' or job.status.lower() == 'pending':
-                            <li class="nav-header">Kill Job</li>
-                            <li><a href="#" title="Kill this job" onclick="$('#kill-job').submit()">Kill this job</a>
+                            <li class="nav-header">${_('Kill Job')}</li>
+                            <li><a href="#" title="${_('Kill this job')}" onclick="$('#kill-job').submit()">${_('Kill this job')}</a>
                                 <form id="kill-job" action="${url('jobbrowser.views.kill_job', jobid=job.jobId)}?next=${request.get_full_path()|urlencode}" method="POST"></form></li>
                     % endif
-                    <li class="nav-header">Output</li>
+                    <li class="nav-header">${_('Output')}</li>
                     <li>
                         <%
                             output_dir = job.conf_keys.get('mapredOutputDir', "")
@@ -123,20 +124,20 @@ ${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
         </div>
         <div class="span10">
             <ul class="nav nav-tabs">
-                <li class="active"><a href="#tasks" data-toggle="tab">Tasks</a></li>
-                <li><a href="#metadata" data-toggle="tab">Metadata</a></li>
-                <li><a href="#counters" data-toggle="tab">Counters</a></li>
+                <li class="active"><a href="#tasks" data-toggle="tab">${_('Tasks')}</a></li>
+                <li><a href="#metadata" data-toggle="tab">${_('Metadata')}</a></li>
+                <li><a href="#counters" data-toggle="tab">${_('Counters')}</a></li>
             </ul>
 
             <div class="tab-content">
                 <div class="tab-pane active" id="tasks">
-                    <strong>Maps:</strong> ${comps.mr_graph_maps(job)}
-                    <strong>Reduces:</strong> ${comps.mr_graph_reduces(job)}
+                    <strong>${_('Maps:')}</strong> ${comps.mr_graph_maps(job)}
+                    <strong>${_('Reduces:')}</strong> ${comps.mr_graph_reduces(job)}
                     %if failed_tasks:
                             <div>
                                 <h3>
-                                    <a href="${url('jobbrowser.views.tasks', jobid=job.jobId)}?taskstate=failed">View Failed Tasks &raquo;</a>
-                                    Failed Tasks
+                                    <a href="${url('jobbrowser.views.tasks', jobid=job.jobId)}?taskstate=failed">${_('View Failed Tasks')} &raquo;</a>
+                                    ${_('Failed Tasks')}
                                 </h3>
                                 <div>
                                 ${task_table(failed_tasks)}
@@ -144,9 +145,9 @@ ${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
                             </div>
                     %endif
                     <div>
-                        <a style="float:right;margin-right:10px" href="${url('jobbrowser.views.tasks', jobid=job.jobId)}">View All Tasks &raquo;</a>
+                        <a style="float:right;margin-right:10px" href="${url('jobbrowser.views.tasks', jobid=job.jobId)}">${_('View All Tasks')} &raquo;</a>
                         <h3>
-                            Recent Tasks
+                            ${_('Recent Tasks')}
                         </h3>
                         <div>
                             ${task_table(recent_tasks)}
@@ -157,56 +158,56 @@ ${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
                 <div id="metadata" class="tab-pane">
                     <div class="well hueWell">
                         <form class="form-search">
-                            Filter: <input id="metadataFilter" class="input-xlarge search-query" placeholder="Text Filter">
+                            ${_('Filter: ')}<input id="metadataFilter" class="input-xlarge search-query" placeholder="${_('Text Filter')}">
                         </form>
                     </div>
                     <table id="metadataTable" class="table table-striped table-condensed">
                         <thead>
-                        <th>Name</th>
-                        <th>Value</th>
+                        <th>${_('Name')}</th>
+                        <th>${_('Value')}</th>
                         </thead>
                         <tbody>
                         <tr>
-                            <td>ID</td>
+                            <td>${_('ID')}</td>
                             <td>${job.jobId}</td>
                         </tr>
                         <tr>
-                            <td>User</td>
+                            <td>${_('User')}</td>
                             <td>${job.user}</td>
                         </tr>
                         <tr>
-                            <td>Maps</td>
+                            <td>${_('Maps')}</td>
                             <td>${job.finishedMaps} of ${job.desiredMaps}</td>
                         </tr>
                         <tr>
-                            <td>Reduces</td>
+                            <td>${_('Reduces')}</td>
                             <td>${job.finishedReduces} of ${job.desiredReduces}</td>
                         </tr>
                         <tr>
-                            <td>Started</td>
+                            <td>${_('Started')}</td>
                             <td>${job.startTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Ended</td>
+                            <td>${_('Ended')}</td>
                             <td>${job.finishTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Duration</td>
+                            <td>${_('Duration')}</td>
                             <td>${job.duration}</td>
                         </tr>
                         <tr>
-                            <td>Status</td>
+                            <td>${_('Status')}</td>
                             <td>${job.status}</td>
                         </tr>
                             ${rows_for_conf_vars(job.conf_keys)}
 
                         </tbody>
                     </table>
-                    <h3>Raw configuration:</h3>
+                    <h3>${_('Raw configuration:')}</h3>
                     <table id="rawConfigurationTable" class="table table-striped table-condensed">
                         <thead>
-                        <th>Name</th>
-                        <th>Value</th>
+                        <th>${_('Name')}</th>
+                        <th>${_('Value')}</th>
                         </thead>
                         <tbody>
 
@@ -225,7 +226,7 @@ ${commonheader("Job: " + job.jobId + " - Job Browser", "jobbrowser")}
 
                 </div>
                 <div id="counters" class="tab-pane">
-                    ${comps.job_counters(job.counters)}
+                    ${comps.job_counters(job.counters, _)}
                 </div>
             </div>
         </div>

+ 8 - 8
apps/jobbrowser/src/jobbrowser/templates/jobbrowser_components.mako

@@ -14,7 +14,7 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 
-<%def name="task_counters(counters)">
+<%def name="task_counters(counters,_)">
     <%
         from jobbrowser.views import format_counter_name
     %>
@@ -23,8 +23,8 @@
         <table class="taskCountersTable table table-striped table-condensed">
             <thead>
             <tr>
-                <th>Counter Name</th>
-                <th>Value</th>
+                <th>${_('Counter Name')}</th>
+                <th>${_('Value')}</th>
             </tr>
             </thead>
         <tbody>
@@ -39,7 +39,7 @@
     % endfor
 </%def>
 
-<%def name="job_counters(counters)">
+<%def name="job_counters(counters,_)">
     <%
         from jobbrowser.views import format_counter_name
     %>
@@ -48,10 +48,10 @@
         <table class="jobCountersTable table table-striped table-condensed">
             <thead>
             <tr>
-                <th>Name</th>
-                <th>Maps Total</th>
-                <th>Reduces Total</th>
-                <th>Total</th>
+                <th>${_('Name')}</th>
+                <th>${_('Maps Total')}</th>
+                <th>${_('Reduces Total')}</th>
+                <th>${_('Total')}</th>
             </tr>
             </thead>
         <tbody>

+ 30 - 29
apps/jobbrowser/src/jobbrowser/templates/jobs.mako

@@ -18,6 +18,7 @@
   from desktop import appmanager
   from django.template.defaultfilters import urlencode
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
@@ -28,44 +29,44 @@
 </%def>
 
 % if len(jobs) > 0 or filtered:
-${commonheader("Job Browser", "jobbrowser")}
+${commonheader(_('Job Browser'), "jobbrowser")}
 <div class="container-fluid">
-<h1>Job Browser</h1>
+<h1>${_('Job Browser')}</h1>
 <div class="well hueWell">
     <form action="/jobbrowser/jobs" method="GET">
-        <b>Filter jobs:</b>
+        <b>${_('Filter jobs:')}</b>
 
                 <select name="state" class="submitter">
-                    <option value="all" ${get_state('all', state_filter)}>All States</option>
-                    <option value="running" ${get_state('running', state_filter)}>Running</option>
-                    <option value="completed" ${get_state('completed', state_filter)}>Completed</option>
-                    <option value="failed" ${get_state('failed', state_filter)}>Failed</option>
-                    <option value="killed" ${get_state('killed', state_filter)}>Killed</option>
+                    <option value="all" ${get_state('all', state_filter)}>${_('All States')}</option>
+                    <option value="running" ${get_state('running', state_filter)}>${_('Running')}</option>
+                    <option value="completed" ${get_state('completed', state_filter)}>${_('Completed')}</option>
+                    <option value="failed" ${get_state('failed', state_filter)}>${_('Failed')}</option>
+                    <option value="killed" ${get_state('killed', state_filter)}>${_('Killed')}</option>
                 </select>
 
-                <input type="text" name="user" title="User Name Filter" value="${user_filter}" placeholder="User Name Filter" class="submitter"/>
+                <input type="text" name="user" title="${_('User Name Filter')}" value="${user_filter}" placeholder="${_('User Name Filter')}" class="submitter"/>
 
-                <input type="text" name="text" title="Text Filter" value="${text_filter}" placeholder="Text Filter" class="submitter"/>
+                <input type="text" name="text" title="${_('Text Filter')}" value="${text_filter}" placeholder="${_('Text Filter')}" class="submitter"/>
 
     </form>
 </div>
 
 
 % if len(jobs) == 0:
-<p>There were no jobs that match your search criteria.</p>
+<p>${_('There were no jobs that match your search criteria.')}</p>
 % else:
 <table class="datatables table table-striped table-condensed">
     <thead>
         <tr>
-            <th>Name / Id</th>
-            <th>Status</th>
-            <th>User</th>
-            <th>Maps</th>
-            <th>Reduces</th>
-            <th>Queue</th>
-            <th>Priority</th>
-            <th>Duration</th>
-            <th>Date</th>
+            <th>${_('Name / Id')}</th>
+            <th>${_('Status')}</th>
+            <th>${_('User')}</th>
+            <th>${_('Maps')}</th>
+            <th>${_('Reduces')}</th>
+            <th>${_('Queue')}</th>
+            <th>${_('Priority')}</th>
+            <th>${_('Duration')}</th>
+            <th>${_('Date')}</th>
             <th></th>
         </tr>
     </thead>
@@ -76,10 +77,10 @@ ${commonheader("Job Browser", "jobbrowser")}
                 <div class="jobbrowser_jobid_short">${job.jobId_short}</div>
             </td>
             <td>
-                <a href="${url('jobbrowser.views.jobs')}?${get_state_link(request, 'state', job.status.lower())}" title="Show only ${job.status.lower()} jobs">${job.status.lower()}</a>
+                <a href="${url('jobbrowser.views.jobs')}?${get_state_link(request, 'state', job.status.lower())}" title="${_('Show only %(status)s jobs') % dict(status=job.status.lower())}">${job.status.lower()}</a>
             </td>
             <td>
-                <a href="${url('jobbrowser.views.jobs')}?${get_state_link(request, 'user', job.user.lower())}" title="Show only ${job.user.lower()} jobs">${job.user}</a>
+                <a href="${url('jobbrowser.views.jobs')}?${get_state_link(request, 'user', job.user.lower())}" title="${_('Show only %(status)s jobs') % dict(status=job.user.lower())}">${job.user}</a>
             </td>
             <td><span alt="${job.maps_percent_complete}">${comps.mr_graph_maps(job)}</span></td>
             <td><span alt="${job.reduces_percent_complete}">${comps.mr_graph_reduces(job)}</span></td>
@@ -88,10 +89,10 @@ ${commonheader("Job Browser", "jobbrowser")}
             <td><span alt="${job.finishTimeMs-job.startTimeMs}">${job.durationFormatted}</span></td>
             <td><span alt="${job.startTimeMs}">${job.startTimeFormatted}</span></td>
             <td>
-                <a href="${url('jobbrowser.views.single_job', jobid=job.jobId)}" title="View this job" data-row-selector="true">View</a>
+                <a href="${url('jobbrowser.views.single_job', jobid=job.jobId)}" title="${_('View this job')}" data-row-selector="true">${_('View')}</a>
                 % if job.status.lower() == 'running' or job.status.lower() == 'pending':
                 % if request.user.is_superuser or request.user.username == job.user:
-                - <a href="#" title="Kill this job" onclick="$('#kill-job').submit()">Kill</a>
+                - <a href="#" title="${_('Kill this job')}" onclick="$('#kill-job').submit()">${_('Kill')}</a>
                 <form id="kill-job" action="${url('jobbrowser.views.kill_job', jobid=job.jobId)}?next=${request.get_full_path()|urlencode}" method="POST"></form>
                 % endif
                 % endif
@@ -103,16 +104,16 @@ ${commonheader("Job Browser", "jobbrowser")}
     % endif
 
     % else:
-    ${commonheader("Job Browser", "jobbrowser")}
+    ${commonheader(_('Job Browser'), "jobbrowser")}
     <div class="container-fluid">
-    <h1>Welcome to the Job Browser</h1>
+    <h1>${_('Welcome to the Job Browser')}</h1>
     <div>
-        <p>There aren't any jobs running. Let's fix that.</p>
+        <p>${_("There aren't any jobs running. Let's fix that.")}</p>
         % if appmanager.get_desktop_module('jobsub') is not None:
-        <a href="/jobsub/">Launch the Job Designer</a><br/>
+        <a href="/jobsub/">${_('Launch the Job Designer')}</a><br/>
         % endif
         % if appmanager.get_desktop_module('beeswax') is not None:
-        <a href="/beeswax/">Launch Beeswax</a><br/>
+        <a href="/beeswax/">${_('Launch Beeswax')}</a><br/>
         % endif
     </div>
     % endif

+ 37 - 36
apps/jobbrowser/src/jobbrowser/templates/task.mako

@@ -15,22 +15,23 @@
 ## limitations under the License.
 <%!
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
-${commonheader("Job Task: " + task.taskId + "- Job Browser", "jobbrowser")}
+${commonheader(_('Job Task: %(taskId)s - Job Browser') % dict(taskId=task.taskId), "jobbrowser")}
 
 <div class="container-fluid">
-    <h1>Job Task: ${task.taskId} - Job Browser</h1>
+    <h1>${_('Job Task: %(taskId)s - Job Browser') % dict(taskId=task.taskId)}</h1>
     <div class="row-fluid">
         <div class="span2">
             <div class="well sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">Task ID</li>
+                    <li class="nav-header">${_('Task ID')}</li>
                     <li>${task.taskId_short}</li>
-                    <li class="nav-header">Job</li>
-                    <li><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="View this job">${joblnk.jobId_short}</a></li>
-                    <li class="nav-header">Status</li>
+                    <li class="nav-header">${_('Job')}</li>
+                    <li><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="${_('View this job')}">${joblnk.jobId_short}</a></li>
+                    <li class="nav-header">${_('Status')}</li>
                     <li>
                             % if task.state.lower() == 'running' or task.state.lower() == 'pending':
                                 <span class="label label-warning">${task.state.lower()}</span>
@@ -45,9 +46,9 @@ ${commonheader("Job Task: " + task.taskId + "- Job Browser", "jobbrowser")}
         </div>
         <div class="span10">
             <ul class="nav nav-tabs">
-                <li class="active"><a href="#attempts" data-toggle="tab">Attempts</a></li>
-                <li><a href="#metadata" data-toggle="tab">Metadata</a></li>
-                <li><a href="#counters" data-toggle="tab">Counters</a></li>
+                <li class="active"><a href="#attempts" data-toggle="tab">${_('Attempts')}</a></li>
+                <li><a href="#metadata" data-toggle="tab">${_('Metadata')}</a></li>
+                <li><a href="#counters" data-toggle="tab">${_('Counters')}</a></li>
             </ul>
 
             <div class="tab-content">
@@ -55,18 +56,18 @@ ${commonheader("Job Task: " + task.taskId + "- Job Browser", "jobbrowser")}
                     <table id="attemptsTable" class="table table-striped table-condensed">
                         <thead>
                         <tr>
-                            <th>Attempt ID</th>
-                            <th>Progress</th>
-                            <th>State</th>
-                            <th>Task Tracker</th>
-                            <th>Start Time</th>
-                            <th>End Time</th>
-                            <th>Output Size</th>
-                            <th>Phase</th>
-                            <th>Shuffle Finish</th>
-                            <th>Sort Finish</th>
-                            <th>Map Finish</th>
-                            <th>View</th>
+                            <th>${_('Attempt ID')}</th>
+                            <th>${_('Progress')}</th>
+                            <th>${_('State')}</th>
+                            <th>${_('Task Tracker')}</th>
+                            <th>${_('Start Time')}</th>
+                            <th>${_('End Time')}</th>
+                            <th>${_('Output Size')}</th>
+                            <th>${_('Phase')}</th>
+                            <th>${_('Shuffle Finish')}</th>
+                            <th>${_('Sort Finish')}</th>
+                            <th>${_('Map Finish')}</th>
+                            <th>${_('View')}</th>
                         </tr>
                         </thead>
                         <tbody>
@@ -83,8 +84,8 @@ ${commonheader("Job Task: " + task.taskId + "- Job Browser", "jobbrowser")}
                                     <td>${attempt.shuffleFinishTimeFormatted}</td>
                                     <td>${attempt.sortFinishTimeFormatted}</td>
                                     <td>${attempt.mapFinishTimeFormatted}</td>
-                                    <td><a title="View this attempt"
-                                           href="${ url('jobbrowser.views.single_task_attempt', jobid=joblnk.jobId, taskid=task.taskId, attemptid=attempt.attemptId) }" data-row-selector="true">View</a></td>
+                                    <td><a title="${_('View this attempt')}"
+                                           href="${ url('jobbrowser.views.single_task_attempt', jobid=joblnk.jobId, taskid=task.taskId, attemptid=attempt.attemptId) }" data-row-selector="true">${_('View')}</a></td>
                                 </tr>
                                 % endfor
                         </tbody>
@@ -93,51 +94,51 @@ ${commonheader("Job Task: " + task.taskId + "- Job Browser", "jobbrowser")}
                 <div id="metadata" class="tab-pane">
                     <table id="metadataTable" class="table table-striped table-condensed">
                         <thead>
-                        <th>Name</th>
-                        <th>Value</th>
+                        <th>${_('Name')}</th>
+                        <th>${_('Value')}</th>
                         </thead>
                         <tbody>
                         <tr>
-                            <td>Task id</td>
+                            <td>${_('Task id')}</td>
                             <td>${task.taskId}</td>
                         </tr>
                         <tr>
-                            <td>Type</td>
+                            <td>${_('Type')}</td>
                             <td>${task.taskType}</td>
                         </tr>
                         <tr>
-                            <td>JobId</td>
-                            <td><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="View this job">${joblnk.jobId}</a></td>
+                            <td>${_('JobId')}</td>
+                            <td><a href="${url('jobbrowser.views.single_job', jobid=joblnk.jobId)}" title="${_('View this job')}">${joblnk.jobId}</a></td>
                         </tr>
                         <tr>
-                            <td>State</td>
+                            <td>${_('State')}</td>
                             <td>${task.state}</td>
                         </tr>
                         <tr>
-                            <td>Status</td>
+                            <td>${_('Status')}</td>
                             <td>${task.mostRecentState}</td>
                         </tr>
                         <tr>
-                            <td>Start Time</td>
+                            <td>${_('Start Time')}</td>
                             <td>${task.startTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Execution Start Time</td>
+                            <td>${_('Execution Start Time')}</td>
                             <td>${task.execStartTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Execution Finish Time</td>
+                            <td>${_('Execution Finish Time')}</td>
                             <td>${task.execFinishTimeFormatted}</td>
                         </tr>
                         <tr>
-                            <td>Progress</td>
+                            <td>${_('Progress')}</td>
                             <td>${"%d" % (task.progress * 100)}%</td>
                         </tr>
                         </tbody>
                     </table>
                 </div>
                 <div id="counters" class="tab-pane">
-                    ${comps.task_counters(task.counters)}
+                    ${comps.task_counters(task.counters, _)}
                 </div>
             </div>
         </div>

+ 28 - 27
apps/jobbrowser/src/jobbrowser/templates/tasks.mako

@@ -16,11 +16,12 @@
 <%
   from jobbrowser.views import get_state_link
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
-${commonheader("Task View: Job: " + jobid + " - Job Browser", "jobbrowser")}
+${commonheader(_('Task View: Job: %(jobId)s - Job Browser') % dict(jobId=jobid), "jobbrowser")}
 
 <%def name="selected(val, state)">
     %   if val is not None and state is not None and val in state:
@@ -28,31 +29,31 @@ ${commonheader("Task View: Job: " + jobid + " - Job Browser", "jobbrowser")}
     %   endif
 </%def>
 <div class="container-fluid">
-    <h1>Task View: Job:  ${jobid}</h1>
+    <h1>${_('Task View: Job: %(jobId)s') % dict(jobId=jobid)}</h1>
     <div class="well hueWell">
         <form method="get" action="/jobbrowser/jobs/${jobid}/tasks">
-            <b>Filter tasks:</b>
+            <b>${_('Filter tasks:')}</b>
 
             <select name="taskstate" class="submitter">
-                <option value="">All states</option>
-                <option value="succeeded" ${selected('succeeded', taskstate)}>succeeded</option>
-                <option value="running" ${selected('running', taskstate)}>running</option>
-                <option value="failed" ${selected('failed', taskstate)}>failed</option>
-                <option value="killed" ${selected('killed', taskstate)}>killed</option>
-                <option value="pending" ${selected('pending', taskstate)}>pending</option>
+                <option value="">${_('All states')}</option>
+                <option value="succeeded" ${selected('succeeded', taskstate)}>${_('succeeded')}</option>
+                <option value="running" ${selected('running', taskstate)}>${_('running')}</option>
+                <option value="failed" ${selected('failed', taskstate)}>${_('failed')}</option>
+                <option value="killed" ${selected('killed', taskstate)}>${_('killed')}</option>
+                <option value="pending" ${selected('pending', taskstate)}>${_('pending')}</option>
             </select>
 
 
             <select name="tasktype" class="submitter">
-                <option value="">All types</option>
-                <option value="map" ${selected('map', tasktype)}>maps</option>
-                <option value="reduce" ${selected('reduce', tasktype)}>reduces</option>
-                <option value="job_cleanup" ${selected('job_cleanup', tasktype)}>cleanups</option>
-                <option value="job_setup" ${selected('job_setup', tasktype)}>setups</option>
+                <option value="">${_('All types')}</option>
+                <option value="map" ${selected('map', tasktype)}>${_('maps')}</option>
+                <option value="reduce" ${selected('reduce', tasktype)}>${_('reduces')}</option>
+                <option value="job_cleanup" ${selected('job_cleanup', tasktype)}>${_('cleanups')}</option>
+                <option value="job_setup" ${selected('job_setup', tasktype)}>${_('setups')}</option>
             </select>
 
 
-            <input type="text" name="tasktext"  class="submitter" title="Text filter" placeholder="Text Filter"
+            <input type="text" name="tasktext"  class="submitter" title="${_('Text filter')}" placeholder="${_('Text Filter')}"
                 % if tasktext:
                    value="${tasktext}"
                 % endif
@@ -62,19 +63,19 @@ ${commonheader("Task View: Job: " + jobid + " - Job Browser", "jobbrowser")}
 
 
     % if len(page.object_list) == 0:
-         <p>There were no tasks that match your search criteria.</p>
+         <p>${_('There were no tasks that match your search criteria.')}</p>
     % else:
         <table class="datatables table table-striped table-condensed">
             <thead>
             <tr>
-                <th>Task ID</th>
-                <th>Type</th>
-                <th>Progress</th>
-                <th>Status</th>
-                <th>State</th>
-                <th>Start Time</th>
-                <th>End Time</th>
-                <th>View Attempts</th>
+                <th>${_('Task ID')}</th>
+                <th>${_('Type')}</th>
+                <th>${_('Progress')}</th>
+                <th>${_('Status')}</th>
+                <th>${_('State')}</th>
+                <th>${_('Start Time')}</th>
+                <th>${_('End Time')}</th>
+                <th>${_('View Attempts')}</th>
             </tr>
             </thead>
 	        <tbody>
@@ -87,14 +88,14 @@ ${commonheader("Task View: Job: " + jobid + " - Job Browser", "jobbrowser")}
 	                </td>
 	                <td>
 	                    <a href="${url('jobbrowser.views.tasks', jobid=jobid)}?${get_state_link(request, 'taskstate', t.state.lower())}"
-	                       title="Show only ${t.state.lower()} tasks"
+	                       title="${_('Show only %(state)s tasks') % dict(state=t.state.lower())}"
 	                       class="${t.state.lower()}">${t.state.lower()}
 	                    </a>
 	                </td>
 	                <td>${t.mostRecentState}</td>
 	                <td>${t.execStartTimeFormatted}</td>
 	                <td>${t.execFinishTimeFormatted}</td>
-	                <td><a href="/jobbrowser/jobs/${jobid}/tasks/${t.taskId}" data-row-selector="true">Attempts</a></td>
+	                <td><a href="/jobbrowser/jobs/${jobid}/tasks/${t.taskId}" data-row-selector="true">${_('Attempts')}</a></td>
 	            </tr>
 	            %endfor
 	        </tbody>
@@ -108,7 +109,7 @@ ${commonheader("Task View: Job: " + jobid + " - Job Browser", "jobbrowser")}
             "bPaginate": false,
             "bLengthChange": false,
             "bFilter": false,
-            "bInfo": false,
+            "bInfo": false
         });
         $("a[data-row-selector='true']").jHueRowSelector();
     });

+ 14 - 13
apps/jobbrowser/src/jobbrowser/templates/tasktracker.mako

@@ -15,43 +15,44 @@
 ## limitations under the License.
 <%!
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
-${commonheader("Tracker " + tracker.trackerId + " - Job Browser", "jobbrowser")}
+${commonheader(_('Tracker: %(trackerId)s - Job Browser') % dict(trackerId=tracker.trackerId), "jobbrowser")}
 <div class="container-fluid">
-	<h1>Tracker at ${ tracker.host } on port ${ tracker.httpPort }</h1>
+	<h1>${_('Tracker at %(trackerHost)s on port %(trackerPort)s') % dict(trackerHost=tracker.host, trackerPort=tracker.httpPort)}</h1>
 	<div>
 		<dl>
-			<dt>ID</dt>
+			<dt>${_('ID')}</dt>
 			<dd>${ tracker.trackerId }</dd>
-			<dt>Last heard from at</dt>
+			<dt>${_('Last heard from at')}</dt>
 			<dd>${ tracker.lastSeenFormatted }.</dd>
 		</dl>
 	</div>
 	
-	<h2>Memory Metrics</h2>
+	<h2>${_('Memory Metrics')}</h2>
 	<div>
 		<dl>
-			<dt>Total virtual memory:</dt>
+			<dt>${_('Total virtual memory:')}</dt>
 			<dd>${tracker.totalVirtualMemory }</dd>
-			<dt>Total physical memory: </dt>
+			<dt>${_('Total physical memory:')}</dt>
 			<dd>${tracker.totalPhysicalMemory }</dd>
-			<dt>Available space: </dt>
+			<dt>${_('Available space:')}</dt>
 			<dd>${tracker.availableSpace}</dd>
 		</dl>
 	</div>
 
-	<h2>Map and Reduce</h2>
+	<h2>${_('Map and Reduce')}</h2>
 	<div>
 		<dl>
-			<dt>Map count:</dt>
+			<dt>${_('Map count:')}</dt>
 			<dd>${tracker.mapCount}</dd>
-			<dt>Reduce count:</dt>
+			<dt>${_('Reduce count:')}</dt>
 			<dd>${tracker.reduceCount}</dd>
-			<dt>Max map tasks:</dt>
+			<dt>${_('Max map tasks:')}</dt>
 			<dd>${tracker.maxMapTasks}</dd>
-			<dt>Max reduce tasks:</dt>
+			<dt>${_('Max reduce tasks:')}</dt>
 			<dd>${tracker.maxReduceTasks}</dd>
 		</dl>
 	</div>

+ 12 - 11
apps/jobbrowser/src/jobbrowser/templates/tasktrackers.mako

@@ -15,23 +15,24 @@
 ## limitations under the License.
 <%!
   from desktop.views import commonheader, commonfooter
+  from django.utils.translation import ugettext as _
 %>
 <%namespace name="comps" file="jobbrowser_components.mako" />
-${commonheader("Task Trackers - Job Browser", "jobbrowser")}
+${commonheader(_('Task Trackers - Job Browser'), "jobbrowser")}
 <div class="container-fluid">
 <table class="datatables">
 	<thead>
 		<tr>
-			<th>Name</th>
-			<th>Host</th>
-			<th>Port</th>
-			<th>Last Seen</th>
-			<th>Available Space</th>
-			<th>Failure Count</th>
-			<th>Map Count</th>
-			<th>Reduce Count</th>
-			<th>Max Map Tasks</th>
-			<th>Max Reduce Tasks</th>
+			<th>${_('Name')}</th>
+			<th>${_('Host')}</th>
+			<th>${_('Port')}</th>
+			<th>${_('Last Seen')}</th>
+			<th>${_('Available Space')}</th>
+			<th>${_('Failure Count')}</th>
+			<th>${_('Map Count')}</th>
+			<th>${_('Reduce Count')}</th>
+			<th>${_('Max Map Tasks')}</th>
+			<th>${_('Max Reduce Tasks')}</th>
 		</tr>
 	</thead>
 	<tbody>