diff --git a/CHANGES.rst b/CHANGES.rst
index 81727fa..c730c78 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,9 @@ Changelog
1.0b1 (unreleased)
------------------
+- Implement i18n on the widget (closes `#15`_).
+ [rodfersou]
+
- Simplify static files stack.
[rodfersou]
@@ -22,3 +25,5 @@ Changelog
------------------
- Initial release.
+
+.. _`#15`: https://github.com/collective/collective.texttospeech/issues/15
diff --git a/src/collective/texttospeech/browser/templates/texttospeech.pt b/src/collective/texttospeech/browser/templates/texttospeech.pt
index 30e53d2..290248e 100644
--- a/src/collective/texttospeech/browser/templates/texttospeech.pt
+++ b/src/collective/texttospeech/browser/templates/texttospeech.pt
@@ -1,4 +1,16 @@
-
+ tal:attributes="data-voice view/voice"
+ i18n:attributes="data-label-stopped;
+ data-label-playing;
+ data-label-paused">
+
diff --git a/src/collective/texttospeech/locales/collective.texttospeech.pot b/src/collective/texttospeech/locales/collective.texttospeech.pot
index dc673d4..57452e2 100644
--- a/src/collective/texttospeech/locales/collective.texttospeech.pot
+++ b/src/collective/texttospeech/locales/collective.texttospeech.pot
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2016-03-28 19:39+0000\n"
+"POT-Creation-Date: 2016-06-10 18:49+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -34,10 +34,22 @@ msgstr ""
msgid "If selected, Text-to-Speech feature will be enabled sitewide."
msgstr ""
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Listen page"
+msgstr ""
+
#: collective/texttospeech/interfaces.py:26
msgid "Only objects of these content types will display a Text-to-Speech button."
msgstr ""
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Pause"
+msgstr ""
+
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Play"
+msgstr ""
+
#: collective/texttospeech/controlpanel.py:10
#: collective/texttospeech/profiles.zcml:14
#: collective/texttospeech/profiles/default/controlpanel.xml
diff --git a/src/collective/texttospeech/locales/es/LC_MESSAGES/collective.texttospeech.po b/src/collective/texttospeech/locales/es/LC_MESSAGES/collective.texttospeech.po
index df71e5c..8282696 100644
--- a/src/collective/texttospeech/locales/es/LC_MESSAGES/collective.texttospeech.po
+++ b/src/collective/texttospeech/locales/es/LC_MESSAGES/collective.texttospeech.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"POT-Creation-Date: 2016-03-28 19:39+0000\n"
+"POT-Creation-Date: 2016-06-10 18:49+0000\n"
"PO-Revision-Date: 2016-03-28 16:40-0300\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -36,10 +36,22 @@ msgstr "Aquí puede modificar las configuraciones de collective.texttospeech."
msgid "If selected, Text-to-Speech feature will be enabled sitewide."
msgstr "Si está seleccionado, la funcionalidad de Text-to-Speech estará habilitada en el sitio."
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Listen page"
+msgstr ""
+
#: collective/texttospeech/interfaces.py:26
msgid "Only objects of these content types will display a Text-to-Speech button."
msgstr "Sólo los objetos de estos tipos de contenido mostrarán el botón de Text-to-Speech."
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Pause"
+msgstr ""
+
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Play"
+msgstr ""
+
#: collective/texttospeech/controlpanel.py:10
#: collective/texttospeech/profiles.zcml:14
#: collective/texttospeech/profiles/default/controlpanel.xml
diff --git a/src/collective/texttospeech/locales/pt_BR/LC_MESSAGES/collective.texttospeech.po b/src/collective/texttospeech/locales/pt_BR/LC_MESSAGES/collective.texttospeech.po
index bb41788..03b6620 100644
--- a/src/collective/texttospeech/locales/pt_BR/LC_MESSAGES/collective.texttospeech.po
+++ b/src/collective/texttospeech/locales/pt_BR/LC_MESSAGES/collective.texttospeech.po
@@ -1,8 +1,10 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"POT-Creation-Date: 2016-03-28 19:39+0000\n"
+"POT-Creation-Date: 2016-06-10 18:49+0000\n"
"PO-Revision-Date: 2016-03-28 16:44-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -11,8 +13,6 @@ msgstr ""
"Language-Name: English\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"
-"Last-Translator: \n"
-"Language-Team: \n"
"Language: pt_BR\n"
"X-Generator: Poedit 1.7.5\n"
@@ -36,10 +36,22 @@ msgstr "Aqui pode modificar as configurações do collective.texttospeech."
msgid "If selected, Text-to-Speech feature will be enabled sitewide."
msgstr "Se estiver selecionado, a funcionalidade de Text-to-Speech estará habilitada no site."
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Listen page"
+msgstr "Escutar página"
+
#: collective/texttospeech/interfaces.py:26
msgid "Only objects of these content types will display a Text-to-Speech button."
msgstr "Só objetos de esses tipos de conteúdo mostrarão o botão de Text-to-Speech."
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Pause"
+msgstr "Pausar"
+
+#: collective/texttospeech/browser/templates/texttospeech.pt:1
+msgid "Play"
+msgstr "Tocar"
+
#: collective/texttospeech/controlpanel.py:10
#: collective/texttospeech/profiles.zcml:14
#: collective/texttospeech/profiles/default/controlpanel.xml
diff --git a/src/collective/texttospeech/static/main.js b/src/collective/texttospeech/static/main.js
index 8abb823..6b2c6bf 100644
--- a/src/collective/texttospeech/static/main.js
+++ b/src/collective/texttospeech/static/main.js
@@ -1 +1 @@
-var MainView = (function() {
function MainView() {
var self = this;
self.$el = $('#viewlet-texttospeech');
self.$el.data('main', self);
self.template = "";
self.playing = false;
self.paused = true;
self.render();
self.$button.on('click', self.play_pause);
}
MainView.prototype.render = function() {
var self = this;
self.$el.html(self.template);
self.$button = $('#texttospeech-button', self.$el);
};
MainView.prototype.onstart = function() {
var self = $('#viewlet-texttospeech').data('main');
self.playing = true;
self.paused = false;
self.$button.attr('value', 'Pause');
};
MainView.prototype.onend = function() {
var self = $('#viewlet-texttospeech').data('main');
self.playing = false;
self.paused = true;
self.$button.attr('value', 'Play');
};
MainView.prototype.play_pause = function(e) {
e.preventDefault();
var self = $('#viewlet-texttospeech').data('main');
if (self.playing) {
if (self.paused) {
self.paused = false;
self.$button.attr('value', 'Pause');
responsiveVoice.resume();
} else {
self.paused = true;
self.$button.attr('value', 'Play');
responsiveVoice.pause();
}
} else {
responsiveVoice.speak(
$('#content').text(),
self.$el.attr('data-voice'), {
onstart: self.onstart,
onend: self.onend
}
);
}
};
return MainView;
})();
var ControlPanelView = (function() {
function ControlPanelView() {
var self = this;
self.template = "";
self.actual_voice = $('#form-widgets-voice').val();
self.render();
}
ControlPanelView.prototype.render = function() {
var self = this;
$('#form-widgets-voice').replaceWith(self.template);
var voicelist = responsiveVoice.getVoices();
var vselect = $('#form-widgets-voice');
var i, len, voice;
for (i = 0, len = voicelist.length; i < len; i++) {
voice = voicelist[i];
if (voice.name === self.actual_voice) {
vselect.append($('').val(voice.name).text(voice.name));
} else {
vselect.append($('').val(voice.name).text(voice.name));
}
}
};
return ControlPanelView;
})();
$(function() {
if ($('#viewlet-texttospeech').length > 0) {
new MainView();
}
if ($('body.template-texttospeech-settings').length > 0) {
new ControlPanelView();
}
});
\ No newline at end of file
+var MainView = (function() {
function MainView() {
this.$el = $('#viewlet-texttospeech');
this.$button = $('#texttospeech-button', this.$el);
this.voice = this.$el.attr('data-voice');
this.label_stopped = this.$el.attr('data-label-stopped');
this.label_playing = this.$el.attr('data-label-playing');
this.label_paused = this.$el.attr('data-label-paused');
this.playing = false;
this.paused = true;
this.$button.on('click', $.proxy(this.play_pause, this));
}
MainView.prototype.onstart = function() {
this.playing = true;
this.paused = false;
this.$button.attr('value', this.label_playing);
this.$button.attr('class', 'playing');
};
MainView.prototype.onend = function() {
this.playing = false;
this.paused = true;
this.$button.attr('value', this.label_stopped);
this.$button.attr('class', 'stopped');
};
MainView.prototype.play_pause = function(e) {
e.preventDefault();
if (this.playing) {
if (this.paused) {
this.paused = false;
this.$button.attr('value', this.label_playing);
this.$button.attr('class', 'playing');
responsiveVoice.resume();
} else {
this.paused = true;
this.$button.attr('value', this.label_paused);
this.$button.attr('class', 'paused');
responsiveVoice.pause();
}
} else {
responsiveVoice.speak(
$('#content').text(),
this.voice, {
onstart: $.proxy(this.onstart, this),
onend: $.proxy(this.onend, this)
}
);
}
};
return MainView;
})();
var ControlPanelView = (function() {
function ControlPanelView() {
this.template = "";
this.actual_voice = $('#form-widgets-voice').val();
this.render();
}
ControlPanelView.prototype.render = function() {
$('#form-widgets-voice').replaceWith(this.template);
var voicelist = responsiveVoice.getVoices();
var vselect = $('#form-widgets-voice');
var i, len, voice;
for (i = 0, len = voicelist.length; i < len; i++) {
voice = voicelist[i];
if (voice.name === this.actual_voice) {
vselect.append($('').val(voice.name).text(voice.name));
} else {
vselect.append($('').val(voice.name).text(voice.name));
}
}
};
return ControlPanelView;
})();
$(function() {
if ($('#viewlet-texttospeech').length > 0) {
new MainView();
}
if ($('body.template-texttospeech-settings').length > 0) {
new ControlPanelView();
}
});
\ No newline at end of file