Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't concatenate strings for translations but use interpolation. #227

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/i18n/helpers/checkHTML.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def main(templates, output_folder=None):

html = unicode(html, "UTF-8")
html = re.sub(r"\|(\w|:|\"|\')+", "", html)
html = html.replace(", $", ", ")

if output_folder:
tf = os.path.join(output_folder, os.path.split(fn)[1])
Expand Down
6 changes: 4 additions & 2 deletions static/js/controllers/chatroomcontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ define(['jquery', 'underscore', 'moment', 'text!partials/fileinfo.html', 'text!p
}, 100));

var displayName = safeDisplayName;
// To be used by chatroom.html partial.
$scope.displayName = displayName;
var buddyImageSrc = $filter("buddyImageSrc");
var fileInfo = $compile(templateFileInfo);
var contactRequest = $compile(templateContactRequest);
Expand Down Expand Up @@ -415,9 +417,9 @@ define(['jquery', 'underscore', 'moment', 'text!partials/fileinfo.html', 'text!p
case "LeftOrJoined":
$scope.showtime(new Date());
if (data.LeftOrJoined === "left") {
$scope.display(null, $("<i>" + displayName(from) + translation._(" is now offline.") + "</i>"));
$scope.display(null, $("<i>" + translation._("%1$s is now offline.", displayName(from)) + "</i>"));
} else {
$scope.display(null, $("<i>" + displayName(from) + translation._(" is now online.") + "</i>"));
$scope.display(null, $("<i>" + translation._("%1$s is now online.", displayName(from)) + "</i>"));
}
break;
case "Log":
Expand Down
5 changes: 4 additions & 1 deletion static/js/controllers/statusmessagecontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
define([], function() {

// StatusmessageController
return ["$scope", "mediaStream", function($scope, mediaStream) {
return ["$scope", "mediaStream", "safeDisplayName", function($scope, mediaStream, safeDisplayName) {

// To be used by statusmessage.html partial.
$scope.displayName = safeDisplayName;

$scope.doHangup = function(reason, id) {
mediaStream.webrtc.doHangup(reason, id);
Expand Down
14 changes: 8 additions & 6 deletions static/js/controllers/uicontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,9 @@ define(['jquery', 'underscore', 'bigscreen', 'moment', 'sjcl', 'modernizr', 'web
// Start to ring.
ringer.start();
// Show incoming call notification.
notification = desktopNotify.notify(translation._("Incoming call"), translation._("from") + " " + displayName(from), {
// TODO: This might not be correct in some languages where the
// name must come first.
notification = desktopNotify.notify(translation._("Incoming call"), translation._("from %1$s", displayName(from)), {
timeout: null
});
$scope.$emit("status", "ringing");
Expand Down Expand Up @@ -808,21 +810,21 @@ define(['jquery', 'underscore', 'bigscreen', 'moment', 'sjcl', 'modernizr', 'web
var message = null;
switch (type) {
case "busy":
message = displayName(details.from) + translation._(" is busy. Try again later.");
message = translation._("%1$s is busy. Try again later.", displayName(details.from));
break;
case "reject":
message = displayName(details.from) + translation._(" rejected your call.");
message = translation._("%1$s rejected your call.", displayName(details.from));
break;
case "pickuptimeout":
message = displayName(details.from) + translation._(" does not pick up.");
message = translation._("%1$s does not pick up.", displayName(details.from));
break;
case "incomingbusy":
toastr.info(moment().format("lll"), displayName(details.from) + translation._(" tried to call you"));
toastr.info(moment().format("lll"), translation._("%1$s tried to call you", displayName(details.from)));
break;
case "abortbeforepickup":
// Fall through
case "incomingpickuptimeout":
toastr.info(moment().format("lll"), displayName(details.from) + translation._(" called you"));
toastr.info(moment().format("lll"), translation._("%1$s called you", displayName(details.from)));
break;
}
if (message) {
Expand Down
15 changes: 11 additions & 4 deletions static/js/directives/chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ define(['jquery', 'underscore', 'text!partials/chat.html', 'text!partials/chatro

return ["$compile", "safeDisplayName", "mediaStream", "safeApply", "desktopNotify", "translation", "playSound", "fileUpload", "randomGen", "buddyData", "appData", "$timeout", "geolocation", function($compile, safeDisplayName, mediaStream, safeApply, desktopNotify, translation, playSound, fileUpload, randomGen, buddyData, appData, $timeout, geolocation) {

// Translation helpers.
translation._("Chat with %1$s");
translation._("Room chat %1$s");

var displayName = safeDisplayName;
var groupChatId = "";
var maxMessageSize = 200000;
Expand Down Expand Up @@ -138,7 +142,8 @@ define(['jquery', 'underscore', 'text!partials/chat.html', 'text!partials/chatro
$scope.showGroupRoom(null, options);
} else {
$scope.showRoom(id, {
title: translation._("Chat with")
// Gets translated in template.
title: "Chat with %1$s"
}, options);
}

Expand All @@ -160,7 +165,8 @@ define(['jquery', 'underscore', 'text!partials/chat.html', 'text!partials/chatro
return;
}
var subscope = $scope.showRoom(id, {
title: translation._("Chat with")
// Gets translated in template.
title: "Chat with %1$s"
}, options);
subscope.sendChatServer(id, "Contact request", {
ContactRequest: {
Expand All @@ -182,7 +188,8 @@ define(['jquery', 'underscore', 'text!partials/chat.html', 'text!partials/chatro

scope.showGroupRoom = function(settings, options) {
var stngs = $.extend({
title: translation._("Room chat"),
// Gets translated in template.
title: "Room chat %1$s",
group: true
}, settings);
return scope.showRoom(controller.group, stngs, options);
Expand Down Expand Up @@ -385,7 +392,7 @@ define(['jquery', 'underscore', 'text!partials/chat.html', 'text!partials/chatro
// before we beep and shout.
if (!subscope.isgroupchat && from !== sessionid) {
playSound.play("chatmessage");
desktopNotify.notify(translation._("Message from ") + displayName(from), message);
desktopNotify.notify(translation._("Message from %1$s", displayName(from)), message);
appData.e.triggerHandler("uiNotification", ["chatmessage", {from: from, message: message, first: subscope.firstmessage}]);
}
subscope.firstmessage = false;
Expand Down
2 changes: 1 addition & 1 deletion static/partials/chat.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<a ng-repeat="room in getVisibleRooms()" ng-click="activateRoom(room.id, true, true)" class="list-group-item" ng-class="{newmessage: room.pending, disabled: !room.enabled}">
<span class="badge" ng-show="room.pending">{{room.pending}}</span>
<span ng-if="room.id !== ''">{{room.id|displayName}}</span>
<span ng-if="room.id === ''">{{_("Room chat")}} {{currentRoomName}}</span>
<span ng-if="room.id === ''">{{_("Room chat %1$s", currentRoomName)}}</span>
<button ng-if="room.id !== ''" class="btn btn-sm btn-default" ng-click="hideRoom(room.id)">
<i class="fa fa-trash-o"></i>
</button>
Expand Down
6 changes: 3 additions & 3 deletions static/partials/chatroom.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<div ng-controller="ChatroomController" class="chat room-{{index}}" ng-class="{'newmessage': newmessage, 'visible': visible, 'chat-p2p': 'p2pstate', 'with_pictures': isgroupchat, 'active': active}">
<div class="chatheader"><div class="chatstatusicon" ng-click="deactivateRoom()"><i class="fa fa-angle-left"></i> <i class="fa fa fa-comments-o"></i></div><div class="chatheadertitle"><span ng-show="p2pstate" class="fa fa-exchange" title="{{_('Peer to peer')}}"/><span>{{settings.title}} {{id|displayName}}</span></div> <div class="ctrl"><i ng-hide="layout.chatMaximized" ng-click="toggleMax()" class="fa fa-expand"></i><i ng-show="layout.chatMaximized" ng-click="toggleMax()" class="fa fa-compress"></i><!--<i title="{{_('Close chat')}}" ng-click="hide()" class="fa fa-times"></i>--></div></div>
<div class="chatheader"><div class="chatstatusicon" ng-click="deactivateRoom()"><i class="fa fa-angle-left"></i> <i class="fa fa fa-comments-o"></i></div><div class="chatheadertitle"><span ng-show="p2pstate" class="fa fa-exchange" title="{{_('Peer to peer')}}"/><span>{{_(settings.title, displayName(id))}}</span></div> <div class="ctrl"><i ng-hide="layout.chatMaximized" ng-click="toggleMax()" class="fa fa-expand"></i><i ng-show="layout.chatMaximized" ng-click="toggleMax()" class="fa fa-compress"></i><!--<i title="{{_('Close chat')}}" ng-click="hide()" class="fa fa-times"></i>--></div></div>
<div class="chatmenu">
<div class="btn-group">
<button ng-if="!isgroupchat && roomType!='Conference'" class="btn btn-sm btn-default" title="{{_('Start video call')}}" ng-click="doCall()"><i class="fa fa-phone fa-fw"></i></button>
Expand All @@ -16,8 +16,8 @@
</div>
<div class="chatbodybottom">
<div class="typinghint" ng-switch on="peerIsTyping">
<span ng-switch-when="start"><i class="fa fa-pencil"></i> {{id|displayName}} {{_('is typing...')}}</span>
<span ng-switch-when="stop"><i class="fa fa-pencil"></i> {{id|displayName}} {{_('has stopped typing...')}}</span>
<span ng-switch-when="start"><i class="fa fa-pencil"></i> {{_('%1$s is typing...', displayName(id))}}</span>
<span ng-switch-when="stop"><i class="fa fa-pencil"></i> {{_('%1$s has stopped typing...', displayName(id))}}</span>
</div>
<div class="inputbox">
<div>
Expand Down
8 changes: 4 additions & 4 deletions static/partials/statusmessage.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<span class="status-{{status}}" ng-switch on="status">
<span ng-switch-when="initializing">{{_("Initializing")}} <i class="fa fa-circle-o-notch fa-spin"></i></span>
<span ng-switch-when="waiting" ng-controller="UsersettingsController as usersettings"><span class="status-indicator"><i style="color:rgb(132,184,25)" class="fa fa-dot-circle-o" title="{{_('Online')}}"></i> {{id|displayName}}</span> <img class="userpicture" ng-show="master.buddyPicture" ng-src="{{master.buddyPicture}}" alt="" /><button ng-if="!authorizing && !myuserid && usersettings.loginUserid" type="button" class="btn btn-default" ng-click="usersettings.loginUserid()">{{_("Sign in")}}</button></span>
<span ng-switch-when="connecting"><span class="msg">{{_("Calling")}} {{dialing|displayName}}</span> <a class="btn btn-small btn-danger" ng-click="doAbort()"><i class="fa fa-circle-o-notch fa-spin"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="connected"><span class="msg">{{_("In call with")}} {{peer|displayName}}</span> <a class="btn btn-small btn-danger hiddenRoomTypeConference" ng-click="doHangup()"><i class="fa fa-sign-out"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="conference"><span class="msg">{{_("Conference with")}} {{peer|displayName}}<span>{{conferencePeers|displayConference}}</span></span> <a class="btn btn-small btn-danger hiddenRoomTypeConference" ng-click="doHangup()"><i class="fa fa-sign-out"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="connecting"><span class="msg">{{_("Calling %1$s", $parent.displayName(dialing))}}</span> <a class="btn btn-small btn-danger" ng-click="doAbort()"><i class="fa fa-circle-o-notch fa-spin"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="connected"><span class="msg">{{_("In call with %1$s", displayName(peer))}}</span> <a class="btn btn-small btn-danger hiddenRoomTypeConference" ng-click="doHangup()"><i class="fa fa-sign-out"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="conference"><span class="msg">{{_("Conference with %1$s", displayName(peer))}}<span>{{conferencePeers|displayConference}}</span></span> <a class="btn btn-small btn-danger hiddenRoomTypeConference" ng-click="doHangup()"><i class="fa fa-sign-out"></i> {{_("Hangup")}}</a></span>
<span ng-switch-when="closed"><span class="msg">{{_("Your are offline")}}</span> <a class="btn btn-small btn-success" ng-click="doReconnect()"><i class="fa fa-sign-in"></i> {{_("Go online")}}</a></span>
<span ng-switch-when="reconnecting">{{_("Connection interrupted")}} <i class="text-warning fa fa-circle-o-notch fa-spin"></i></span>
<span ng-switch-when="error"><span class="msg">{{_("An error occured")}}</span> <a class="btn btn-small btn-success" ng-click="doReconnect()"><i class="fa fa-refresh"></i> {{_("Retry")}}</a></span>
<span ng-switch-when="ringing"><span class="msg long">{{_("Incoming call")}} {{_("from")}} {{incoming|displayName}}</span> <span class="actions"><a class="btn btn-small btn-success btn-shakeityeah" ng-click="doAccept()"><i class="fa fa-phone"></i> {{_("Accept call")}}</a> <a class="btn btn-small btn-danger" ng-click="doReject()"><i class="fa fa-sign-out"></i> {{_("Reject")}}</a></span></span>
<span ng-switch-when="ringing"><span class="msg long">{{_("Incoming call from %1$s", displayName(incoming))}}</span> <span class="actions"><a class="btn btn-small btn-success btn-shakeityeah" ng-click="doAccept()"><i class="fa fa-phone"></i> {{_("Accept call")}}</a> <a class="btn btn-small btn-danger" ng-click="doReject()"><i class="fa fa-sign-out"></i> {{_("Reject")}}</a></span></span>
<span ng-switch-when="waitforusermedia"><span class="msg">{{_("Waiting for camera/microphone access")}}</span> <a class="btn btn-small btn-danger hiddenRoomTypeConference" ng-click="doHangup()"><i class="fa fa-circle-o-notch fa-spin"></i> {{_("Hangup")}}</a></span>
</span>