mirror of
https://github.com/YunoHost-Apps/jappix_ynh.git
synced 2024-09-03 19:26:19 +02:00
Update sources to Jappix 1.1.2
This commit is contained in:
parent
88db60ddf9
commit
71db53b86c
132 changed files with 18072 additions and 15798 deletions
|
@ -4,8 +4,22 @@ Jappix Changelog
|
|||
Here's the log of what has changed over the Jappix releases.
|
||||
|
||||
|
||||
Primo, v1.1.0 (Jun 2014)
|
||||
------------------------
|
||||
Primo, v1.1.2 (October 2014)
|
||||
----------------------------
|
||||
|
||||
* XEP-0353: Jingle Message Initiation @valeriansaliou
|
||||
* Fixes Jingle calls in Chrome 38+ @valeriansaliou
|
||||
|
||||
|
||||
Primo, v1.1.1 (September 2014)
|
||||
------------------------------
|
||||
|
||||
* Ignore empty XHTML-IM messages @eijebong, @valeriansaliou
|
||||
* Fix a bug with message markers @valeriansaliou
|
||||
|
||||
|
||||
Primo, v1.1.0 (June 2014)
|
||||
-------------------------
|
||||
|
||||
* XEP-0272: Multiparty Jingle (Muji) @valeriansaliou
|
||||
* Prevent client crash on huge messages @valeriansaliou
|
||||
|
|
|
@ -67,14 +67,15 @@ Here are listed the XMPP Protocol Extensions that Jappix supports, as well as th
|
|||
* XEP-0334: Message Processing Hints *v0.1*
|
||||
* XEP-0338: Jingle Grouping Framework *v0.1*
|
||||
* XEP-0339: Source-Specific Media Attributes in Jingle *v0.1*
|
||||
* XEP-0353: Jingle Message Initiation *v0.1*
|
||||
|
||||
|
||||
# XMPP Extensions (Updated)
|
||||
|
||||
* XEP-0272: Multiparty Jingle (Muji) *v0.2*
|
||||
* Alternate URL: https://demo.frenchtouch.pro/valerian.saliou/xmpp/extensions/xep-0272.html
|
||||
* Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0272.html
|
||||
* XEP-0313: Message Archive Management *v0.3*
|
||||
* Alternate URL: https://demo.frenchtouch.pro/valerian.saliou/xmpp/extensions/xep-0313.html
|
||||
* Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0313.html
|
||||
|
||||
|
||||
# XMPP Extensions (Proposed)
|
||||
|
|
|
@ -6,7 +6,7 @@ Jappix is a fresh new open social platform which enables you to create your own
|
|||
You can build your own Jappix installation for your own requirements: if you want to use it as a personal social client, you can download it and put it on your webserver. It's easy, fast and free.
|
||||
|
||||
|
||||
[![build status](https://ci.frenchtouch.pro/projects/7/status.png?ref=master)](https://ci.frenchtouch.pro/projects/7?ref=master)
|
||||
[![build status](https://ci.hakuma.holdings/projects/7/status.png?ref=master)](https://ci.hakuma.holdings/projects/7?ref=master)
|
||||
|
||||
|
||||
License
|
||||
|
@ -45,7 +45,7 @@ Mirrors
|
|||
In case a master service is down (GitHub for Git access or Jappix.org for project download), here is a list of available mirrors:
|
||||
|
||||
* Project website mirror: https://project.jappix.com/
|
||||
* Development repository mirror: https://code.frenchtouch.pro/jappix/jappix
|
||||
* Development repository mirror: https://code.hakuma.holdings/jappix/jappix
|
||||
|
||||
|
||||
MUC Links
|
||||
|
|
|
@ -1 +1 @@
|
|||
Primo [1.1.0]
|
||||
Primo [1.1.2]
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
var BrowserDetect = {
|
||||
init: function () {
|
||||
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
|
||||
this.version = this.searchVersion(navigator.userAgent)
|
||||
|| this.searchVersion(navigator.appVersion)
|
||||
|| "an unknown version";
|
||||
this.version = this.searchVersion(navigator.userAgent) ||
|
||||
this.searchVersion(navigator.appVersion) ||
|
||||
"an unknown version";
|
||||
this.OS = this.searchString(this.dataOS) || "an unknown OS";
|
||||
},
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@ var Call = (function() {
|
|||
|
||||
/* Variables */
|
||||
self._start_stamp = 0;
|
||||
self.call_auto_accept = {
|
||||
'from' : null,
|
||||
'sid' : null
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
|
@ -139,6 +143,123 @@ var Call = (function() {
|
|||
}
|
||||
},
|
||||
|
||||
single_propose: function(stanza, proposed_medias) {
|
||||
try {
|
||||
var stanza_from = stanza.getFrom() || null;
|
||||
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
|
||||
|
||||
// Request for Jingle session to be accepted
|
||||
if(stanza_from && call_id) {
|
||||
var call_media_main = 'audio';
|
||||
|
||||
if(JSJAC_JINGLE_MEDIA_VIDEO in proposed_medias) {
|
||||
call_media_main = 'video';
|
||||
}
|
||||
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
Common.bareXID(stanza_from),
|
||||
('broadcast_' + call_media_main),
|
||||
call_media_main,
|
||||
null,
|
||||
|
||||
{
|
||||
full_xid: stanza_from,
|
||||
call_id: call_id,
|
||||
medias: proposed_medias
|
||||
}
|
||||
);
|
||||
|
||||
Audio.play('incoming-call', true);
|
||||
|
||||
// Save initiator (security: don't save SID until it's accepted)
|
||||
self.call_auto_accept.from = stanza_from;
|
||||
self.call_auto_accept.sid = null;
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Call.init[single_propose]', e);
|
||||
}
|
||||
},
|
||||
|
||||
single_retract: function(stanza) {
|
||||
try {
|
||||
var stanza_from = stanza.getFrom() || null;
|
||||
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
|
||||
var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
|
||||
|
||||
// Call retracted (from initiator)
|
||||
if(self.call_auto_accept.from == stanza_from) {
|
||||
Audio.stop('incoming-call');
|
||||
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
Common.bareXID(stanza_from),
|
||||
'remote_canceled'
|
||||
);
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Call.init[single_retract]', e);
|
||||
}
|
||||
},
|
||||
|
||||
single_accept: function(stanza) {
|
||||
try {
|
||||
var stanza_from = stanza.getFrom() || null;
|
||||
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
|
||||
|
||||
// Another resource accepted the call
|
||||
if(self.call_auto_accept.sid == call_id &&
|
||||
stanza_from && Common.getFullXID() != stanza_from) {
|
||||
self._unnotify();
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Call.init[single_accept]', e);
|
||||
}
|
||||
},
|
||||
|
||||
single_reject: function(stanza) {
|
||||
try {
|
||||
var stanza_from = stanza.getFrom() || null;
|
||||
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
|
||||
|
||||
// Another resource rejected the call
|
||||
if(self.call_auto_accept.sid == call_id &&
|
||||
stanza_from && Common.getFullXID() != stanza_from) {
|
||||
self._unnotify();
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Call.init[single_reject]', e);
|
||||
}
|
||||
},
|
||||
|
||||
single_proceed: function(stanza) {
|
||||
try {
|
||||
// Read broadcast parameters
|
||||
var call_to = stanza.getFrom() || null;
|
||||
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
|
||||
var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
|
||||
|
||||
// Check medias to include
|
||||
var has_media_video = false;
|
||||
|
||||
for(var i = 0; i < call_medias.length; i++) {
|
||||
if(call_medias[i] === JSJAC_JINGLE_MEDIA_VIDEO) {
|
||||
has_media_video = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var call_media_picked = has_media_video ? JSJAC_JINGLE_MEDIA_VIDEO : JSJAC_JINGLE_MEDIA_AUDIO;
|
||||
|
||||
// Follow up Jingle call
|
||||
Jingle.follow_up(call_to, call_media_picked, call_id);
|
||||
} catch(e) {
|
||||
Console.error('Call.init[single_proceed]', e);
|
||||
}
|
||||
},
|
||||
|
||||
// Receive a multiparty (Muji) call
|
||||
muji_invite: function(stanza, args) {
|
||||
try {
|
||||
|
@ -186,13 +307,14 @@ var Call = (function() {
|
|||
/**
|
||||
* Stops current call
|
||||
* @public
|
||||
* @param {boolean} abort
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.stop = function() {
|
||||
self.stop = function(abort) {
|
||||
|
||||
try {
|
||||
Jingle.stop();
|
||||
Muji.stop();
|
||||
Jingle.stop(abort);
|
||||
Muji.stop(abort);
|
||||
} catch(e) {
|
||||
Console.error('Call.stop', e);
|
||||
} finally {
|
||||
|
@ -464,9 +586,10 @@ var Call = (function() {
|
|||
* @param {string} xid
|
||||
* @param {string} type
|
||||
* @param {string} mode
|
||||
* @param {object} [options_arr]
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.notify = function(call_type, xid, type, mode, sender_xid) {
|
||||
self.notify = function(call_type, xid, type, mode, sender_xid, options_arr) {
|
||||
|
||||
try {
|
||||
sender_xid = sender_xid || xid;
|
||||
|
@ -532,11 +655,11 @@ var Call = (function() {
|
|||
call_tools_all_sel.find('a.reply-button[data-action="' + button + '"]').click(function() {
|
||||
try {
|
||||
// Remove notification
|
||||
self._unnotify(xid);
|
||||
self._unnotify();
|
||||
|
||||
// Execute callback, if any
|
||||
if(typeof attrs.cb === 'function') {
|
||||
attrs.cb(xid, mode);
|
||||
attrs.cb(xid, mode, options_arr);
|
||||
}
|
||||
|
||||
Console.info('Closed call notification drawer');
|
||||
|
|
|
@ -234,9 +234,10 @@ var Chat = (function () {
|
|||
* @private
|
||||
* @param {string} type
|
||||
* @param {string} id
|
||||
* @param {string} xid
|
||||
* @return {object}
|
||||
*/
|
||||
self._generateChatCode = function(type, id) {
|
||||
self._generateChatCode = function(type, id, xid) {
|
||||
|
||||
var code_args = {};
|
||||
|
||||
|
@ -400,7 +401,7 @@ var Chat = (function () {
|
|||
var escaped_xid = escape(xid);
|
||||
|
||||
// Special code
|
||||
var chat_args = self._generateChatCode(type, id);
|
||||
var chat_args = self._generateChatCode(type, id, xid);
|
||||
|
||||
// Append the chat HTML code
|
||||
$('#page-engine').append(
|
||||
|
|
|
@ -555,7 +555,7 @@ var Common = (function () {
|
|||
|
||||
|
||||
/**
|
||||
* Gets the full XID of the user
|
||||
* Gets the bare XID of the user
|
||||
* @public
|
||||
* @return {string}
|
||||
*/
|
||||
|
@ -575,6 +575,29 @@ var Common = (function () {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Gets the full XID of the user
|
||||
* @public
|
||||
* @return {string}
|
||||
*/
|
||||
self.getFullXID = function() {
|
||||
|
||||
try {
|
||||
var xid = self.getXID();
|
||||
|
||||
// Return the full XID of the user
|
||||
if(xid) {
|
||||
return xid + '/' + con.resource;
|
||||
}
|
||||
|
||||
return '';
|
||||
} catch(e) {
|
||||
Console.error('Common.getFullXID', e);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Generates the colors for a given user XID
|
||||
* @public
|
||||
|
|
|
@ -460,7 +460,7 @@ var Connection = (function () {
|
|||
// Remove the waiting item
|
||||
Interface.removeGeneralWait();
|
||||
|
||||
// Init Jingle
|
||||
// Init call
|
||||
Call.init();
|
||||
} catch(e) {
|
||||
Console.error('Connection.handleConnected', e);
|
||||
|
@ -522,6 +522,9 @@ var Connection = (function () {
|
|||
try {
|
||||
Console.info('Jappix is now disconnected.');
|
||||
|
||||
// Abort ongoing call (if any)
|
||||
Call.stop(true);
|
||||
|
||||
// Normal disconnection
|
||||
if(!self.current_session && !self.connected) {
|
||||
Talk.destroy();
|
||||
|
|
|
@ -406,9 +406,10 @@ var DateUtils = (function () {
|
|||
* Reads a message delay
|
||||
* @public
|
||||
* @param {string} node
|
||||
* @return {string}
|
||||
* @param {boolean} return_date
|
||||
* @return {string|Date}
|
||||
*/
|
||||
self.readMessageDelay = function(node) {
|
||||
self.readMessageDelay = function(node, return_date) {
|
||||
|
||||
try {
|
||||
// Initialize
|
||||
|
@ -425,9 +426,15 @@ var DateUtils = (function () {
|
|||
// Old delay (obsolete XEP!)
|
||||
var x_delay = jQuery(node).find('x[xmlns="' + NS_DELAY + '"]:first').attr('stamp');
|
||||
|
||||
if(x_delay)
|
||||
if(x_delay) {
|
||||
delay = x_delay.replace(/^(\w{4})(\w{2})(\w{2})T(\w{2}):(\w{2}):(\w{2})Z?(\S+)?/, '$1-$2-$3T$4:$5:$6Z$7');
|
||||
}
|
||||
}
|
||||
|
||||
// Return a date object?
|
||||
if(return_date === true && delay) {
|
||||
return Date.jab2date(delay);
|
||||
}
|
||||
|
||||
return delay;
|
||||
} catch(e) {
|
||||
|
|
|
@ -401,6 +401,32 @@ var Filter = (function () {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Returns whether XHTML body exists or not
|
||||
* @public
|
||||
* @param {DOM} xhtml_sel
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.has_xhtml_body = function(xhtml_sel) {
|
||||
|
||||
var has_xhtml_body = false;
|
||||
|
||||
try {
|
||||
xhtml_sel.find('*').each(function() {
|
||||
if($(this).text()) {
|
||||
has_xhtml_body = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
} catch(e) {
|
||||
Console.error('Filter.has_xhtml_body', e);
|
||||
} finally {
|
||||
return has_xhtml_body;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Filters a xHTML message to be displayed in Jappix
|
||||
* @public
|
||||
|
|
|
@ -21,7 +21,7 @@ var Groupchat = (function () {
|
|||
|
||||
|
||||
/* Variables */
|
||||
var JOIN_SUGGEST = [];
|
||||
self.join_suggest = [];
|
||||
|
||||
|
||||
/**
|
||||
|
@ -197,7 +197,9 @@ var Groupchat = (function () {
|
|||
// Store groupchats to join?
|
||||
if(this_sel.is('.continue')) {
|
||||
$('#suggest .content a.one.active').each(function() {
|
||||
JOIN_SUGGEST.push(this_sel.attr('data-xid'));
|
||||
self.join_suggest.push(
|
||||
$(this).attr('data-xid')
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -343,7 +345,6 @@ var Groupchat = (function () {
|
|||
|
||||
// Configure the new room
|
||||
if(affiliation == 'owner' || affiliation == 'admin') {
|
||||
console.debug('presence', presence.xml());
|
||||
self._initialConfiguration(id, room);
|
||||
}
|
||||
|
||||
|
@ -554,14 +555,14 @@ var Groupchat = (function () {
|
|||
|
||||
try {
|
||||
// Nothing to join?
|
||||
if(!JOIN_SUGGEST) {
|
||||
if(!self.join_suggest) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Join the chats
|
||||
if(JOIN_SUGGEST.length) {
|
||||
for(var g in JOIN_SUGGEST) {
|
||||
Chat.checkCreate(JOIN_SUGGEST[g], 'groupchat');
|
||||
if(self.join_suggest.length) {
|
||||
for(var g in self.join_suggest) {
|
||||
Chat.checkCreate(self.join_suggest[g], 'groupchat');
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
|
@ -614,7 +615,7 @@ var Groupchat = (function () {
|
|||
// Attach events
|
||||
self._suggestCheckEvents();
|
||||
} else {
|
||||
JOIN_SUGGEST = groupchat_arr;
|
||||
self.join_suggest = groupchat_arr;
|
||||
|
||||
Connection.triggerConnected();
|
||||
}
|
||||
|
|
|
@ -140,7 +140,7 @@ var addToHome = (function (w) {
|
|||
options.message = '';
|
||||
}
|
||||
if ( options.message === '' ) { // We look for a suitable language (defaulted to en_us)
|
||||
options.message = language in intl ? intl[language] : intl['en_us'];
|
||||
options.message = language in intl ? intl[language] : intl.en_us;
|
||||
}
|
||||
|
||||
if ( options.touchIcon ) {
|
||||
|
|
|
@ -63,9 +63,10 @@ var Jingle = (function() {
|
|||
* @param hash
|
||||
* @param local_view
|
||||
* @param remote_view
|
||||
* @param [sid]
|
||||
* @return {object}
|
||||
*/
|
||||
self._args = function(connection, xid, hash, media, local_view, remote_view) {
|
||||
self._args = function(connection, xid, hash, media, local_view, remote_view, sid) {
|
||||
|
||||
args = {};
|
||||
|
||||
|
@ -107,6 +108,16 @@ var Jingle = (function() {
|
|||
} else {
|
||||
// Incoming call?
|
||||
if(jingle.is_responder()) {
|
||||
// Auto-accept (we previously accepted the associated broadcast request)
|
||||
if(Call.call_auto_accept.from == jingle.get_to() && Call.call_auto_accept.sid == jingle.get_sid()) {
|
||||
Call.call_auto_accept.from = null;
|
||||
Call.call_auto_accept.sid = null;
|
||||
|
||||
// Delay acceptance (status change is delayed)
|
||||
setTimeout(function() {
|
||||
jingle.accept();
|
||||
}, 250);
|
||||
} else {
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
Common.bareXID(jingle.get_to()),
|
||||
|
@ -120,6 +131,7 @@ var Jingle = (function() {
|
|||
Audio.play('incoming-call', true);
|
||||
jingle.info(JSJAC_JINGLE_SESSION_INFO_RINGING);
|
||||
}, 250);
|
||||
}
|
||||
} else {
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
|
@ -258,6 +270,10 @@ var Jingle = (function() {
|
|||
},
|
||||
|
||||
session_terminate_error: function(jingle, stanza) {
|
||||
if(typeof jingle.parent != 'undefined') {
|
||||
jingle = jingle.parent;
|
||||
}
|
||||
|
||||
// Ensure we this is the same call session ID (SID)
|
||||
if(self._session.get_sid() == jingle.get_sid()) {
|
||||
if(self._bypass_termination_notify !== true) {
|
||||
|
@ -317,6 +333,10 @@ var Jingle = (function() {
|
|||
Console.log('Jingle._args', 'session_terminate_request');
|
||||
}
|
||||
};
|
||||
|
||||
if(sid && typeof sid == 'string') {
|
||||
args.sid = sid;
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Jingle._args', e);
|
||||
} finally {
|
||||
|
@ -333,9 +353,10 @@ var Jingle = (function() {
|
|||
* @param mode
|
||||
* @param is_callee
|
||||
* @param stanza
|
||||
* @param [sid]
|
||||
* @return {boolean}
|
||||
*/
|
||||
self._new = function(xid, mode, is_callee, stanza) {
|
||||
self._new = function(xid, mode, is_callee, stanza, sid) {
|
||||
|
||||
var status = false;
|
||||
|
||||
|
@ -379,7 +400,8 @@ var Jingle = (function() {
|
|||
bare_hash,
|
||||
media,
|
||||
jingle_sel.find('.local_video video')[0],
|
||||
jingle_sel.find('.remote_video video')[0]
|
||||
jingle_sel.find('.remote_video video')[0],
|
||||
sid
|
||||
);
|
||||
|
||||
self._session = new JSJaCJingle.session(JSJAC_JINGLE_SESSION_SINGLE, args);
|
||||
|
@ -462,8 +484,11 @@ var Jingle = (function() {
|
|||
self.start = function(xid, mode) {
|
||||
|
||||
try {
|
||||
if(!Call.is_ongoing()) {
|
||||
self._new(xid, mode);
|
||||
// Remote user supports XEP-0353
|
||||
if(Caps.getFeatureResource(xid, NS_JINGLE_MESSAGE)) {
|
||||
Jingle.propose(xid, mode);
|
||||
} else {
|
||||
Jingle.initialize(xid, mode);
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Jingle.start', e);
|
||||
|
@ -474,6 +499,115 @@ var Jingle = (function() {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Initializes a Jingle call
|
||||
* @public
|
||||
* @param {string} xid
|
||||
* @param {string} mode
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.initialize = function(xid, mode) {
|
||||
|
||||
try {
|
||||
if(!Call.is_ongoing()) {
|
||||
Console.info('Jingle.initialize', 'Initiating call with: ' + xid);
|
||||
|
||||
self._new(xid, mode);
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Jingle.initialize', e);
|
||||
} finally {
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Proposes a Jingle call
|
||||
* @public
|
||||
* @param {string} xid
|
||||
* @param {string} mode
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.propose = function(xid, mode) {
|
||||
|
||||
try {
|
||||
if(!Call.is_ongoing()) {
|
||||
Console.info('Jingle.propose', 'Proposing call to: ' + xid);
|
||||
|
||||
var medias = [JSJAC_JINGLE_MEDIA_AUDIO];
|
||||
|
||||
if(mode == 'video') {
|
||||
medias.push(JSJAC_JINGLE_MEDIA_VIDEO);
|
||||
}
|
||||
|
||||
var call_id = JSJaCJingleBroadcast.propose(
|
||||
xid, medias,
|
||||
|
||||
function(id) {
|
||||
// Timeout
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
xid,
|
||||
'broadcast_timeout',
|
||||
mode
|
||||
);
|
||||
|
||||
// Retract
|
||||
JSJaCJingleBroadcast.retract(xid, id);
|
||||
}
|
||||
);
|
||||
|
||||
// Send directed presence? (for CAPS, XEP-compliant)
|
||||
if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
|
||||
Presence.send(xid);
|
||||
}
|
||||
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
xid,
|
||||
'broadcast_proposing',
|
||||
mode,
|
||||
null,
|
||||
|
||||
{
|
||||
call_id: call_id
|
||||
}
|
||||
);
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Jingle.propose', e);
|
||||
} finally {
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Follows up a Jingle call (from broadcast)
|
||||
* @public
|
||||
* @param {string} xid
|
||||
* @param {string} mode
|
||||
* @param {string} sid
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.follow_up = function(xid, mode, sid) {
|
||||
|
||||
try {
|
||||
if(!Call.is_ongoing()) {
|
||||
self._new(xid, mode, false, null, sid);
|
||||
}
|
||||
} catch(e) {
|
||||
Console.error('Jingle.follow_up', e);
|
||||
} finally {
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Reset current Jingle call
|
||||
* @public
|
||||
|
@ -503,9 +637,10 @@ var Jingle = (function() {
|
|||
/**
|
||||
* Stops current Jingle call
|
||||
* @public
|
||||
* @param {boolean} abort
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.stop = function() {
|
||||
self.stop = function(abort) {
|
||||
|
||||
try {
|
||||
// Reset interface
|
||||
|
@ -514,7 +649,13 @@ var Jingle = (function() {
|
|||
// Stop Jingle session
|
||||
if(self._session !== null) {
|
||||
self._call_ender = 'local';
|
||||
|
||||
if(abort === true) {
|
||||
self._session.abort();
|
||||
self._session.get_session_terminate_error(self._session, null);
|
||||
} else {
|
||||
self._session.terminate();
|
||||
}
|
||||
|
||||
Console.debug('Stopping current Jingle call...');
|
||||
} else {
|
||||
|
@ -651,6 +792,55 @@ var Jingle = (function() {
|
|||
self._notify_map = function() {
|
||||
|
||||
try {
|
||||
var broadcast_media_fn = function(xid, mode, attrs) {
|
||||
JSJaCJingleBroadcast.accept(
|
||||
attrs.full_xid, attrs.call_id, attrs.medias
|
||||
);
|
||||
|
||||
// Send directed presence? (for CAPS, XEP-compliant)
|
||||
if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
|
||||
Presence.send(attrs.full_xid);
|
||||
}
|
||||
|
||||
// Marker to auto-accept call later
|
||||
Call.call_auto_accept.from = attrs.full_xid;
|
||||
Call.call_auto_accept.sid = attrs.call_id;
|
||||
|
||||
var medias_arr = [];
|
||||
|
||||
for(var cur_media in attrs.medias) {
|
||||
medias_arr.push(cur_media);
|
||||
}
|
||||
|
||||
Audio.stop('incoming-call');
|
||||
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
xid,
|
||||
'broadcast_wait',
|
||||
medias_arr
|
||||
);
|
||||
|
||||
// Schedule timeout (in case we don't receive the Jingle initialization stanza)
|
||||
setTimeout(function() {
|
||||
if(self._session !== null &&
|
||||
Call.call_auto_accept.sid == self._session.get_sid() &&
|
||||
self._session.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
|
||||
// Call received
|
||||
Call.call_auto_accept.from = null;
|
||||
Call.call_auto_accept.sid = null;
|
||||
} else {
|
||||
// Reset UI (timeout)
|
||||
Call.notify(
|
||||
JSJAC_JINGLE_SESSION_SINGLE,
|
||||
xid,
|
||||
'broadcast_error',
|
||||
medias_arr
|
||||
);
|
||||
}
|
||||
}, (JSJAC_JINGLE_BROADCAST_TIMEOUT * 1000));
|
||||
};
|
||||
|
||||
return {
|
||||
'call_audio': {
|
||||
'text': Common._e("Is calling you"),
|
||||
|
@ -700,6 +890,104 @@ var Jingle = (function() {
|
|||
}
|
||||
},
|
||||
|
||||
'broadcast_audio': {
|
||||
'text': Common._e("Is calling you"),
|
||||
|
||||
'buttons': {
|
||||
'accept': {
|
||||
'text': Common._e("Accept"),
|
||||
'color': 'green',
|
||||
'cb': broadcast_media_fn
|
||||
},
|
||||
|
||||
'decline': {
|
||||
'text': Common._e("Decline"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode, attrs) {
|
||||
JSJaCJingleBroadcast.reject(
|
||||
attrs.full_xid, attrs.call_id, attrs.medias
|
||||
);
|
||||
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
'broadcast_video': {
|
||||
'text': Common._e("Is calling you"),
|
||||
|
||||
'buttons': {
|
||||
'accept': {
|
||||
'text': Common._e("Accept"),
|
||||
'color': 'green',
|
||||
'cb': broadcast_media_fn
|
||||
},
|
||||
|
||||
'decline': {
|
||||
'text': Common._e("Decline"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode, attrs) {
|
||||
JSJaCJingleBroadcast.reject(
|
||||
attrs.full_xid, attrs.call_id, attrs.medias
|
||||
);
|
||||
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
'broadcast_wait': {
|
||||
'text': Common._e("Waiting...")
|
||||
},
|
||||
|
||||
'broadcast_proposing': {
|
||||
'text': Common._e("Proposing call..."),
|
||||
|
||||
'buttons': {
|
||||
'cancel': {
|
||||
'text': Common._e("Cancel"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode, attrs) {
|
||||
// Retract from call
|
||||
JSJaCJingleBroadcast.retract(
|
||||
xid,
|
||||
attrs.call_id
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
'broadcast_timeout': {
|
||||
'text': Common._e("No answer"),
|
||||
|
||||
'buttons': {
|
||||
'okay': {
|
||||
'text': Common._e("Okay"),
|
||||
'color': 'blue',
|
||||
'cb': function(xid, mode) {
|
||||
self._reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
'broadcast_error': {
|
||||
'text': Common._e("Call error"),
|
||||
|
||||
'buttons': {
|
||||
'cancel': {
|
||||
'text': Common._e("Cancel"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode) {
|
||||
self._reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
'initiating': {
|
||||
'text': Common._e("Initiating call"),
|
||||
|
||||
|
|
557
source/app/javascripts/jquery.js
vendored
557
source/app/javascripts/jquery.js
vendored
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1227,7 +1227,7 @@ JSJAC_REGID_TIMEOUT = 20000; // time in msec until registered
|
|||
JSJACHBC_MAX_HOLD = 1; // default for number of connctions
|
||||
// held by connection manager
|
||||
|
||||
JSJACHBC_MAX_WAIT = 300; // default 'wait' param - how long an
|
||||
JSJACHBC_MAX_WAIT = 20; // default 'wait' param - how long an
|
||||
// idle connection should be held by
|
||||
// connection manager
|
||||
|
||||
|
|
|
@ -245,10 +245,10 @@ var Markers = (function () {
|
|||
* @param {boolean} is_mam_marker
|
||||
* @return {undefined}
|
||||
*/
|
||||
self.handle = function(from, message, is_mam_marker) {
|
||||
self.handle = function(from, message, is_mam_marker, is_groupchat_user) {
|
||||
|
||||
try {
|
||||
var xid = Common.bareXID(from);
|
||||
var xid = ((is_groupchat_user !== true && Common.bareXID(from)) || from);
|
||||
var marker_sel = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]');
|
||||
|
||||
if(marker_sel.size()) {
|
||||
|
|
|
@ -1354,9 +1354,13 @@ var Message = (function () {
|
|||
var xid = Common.bareXID(from);
|
||||
var resource = Common.thisResource(from);
|
||||
var hash = hex_md5(xid);
|
||||
var xHTML = $(node).find('html body').size();
|
||||
var xHTML_sel = $(node).find('html body');
|
||||
var xHTML = xHTML_sel.size();
|
||||
var is_groupchat_user = false;
|
||||
|
||||
// Check for non-empty body
|
||||
var has_body = (((xHTML && Filter.has_xhtml_body(xHTML_sel)) || body) && true);
|
||||
|
||||
// This message comes from a Muji room (ignore)
|
||||
if(Muji.is_room(xid)) {
|
||||
return false;
|
||||
|
@ -1441,7 +1445,7 @@ var Message = (function () {
|
|||
}
|
||||
|
||||
// If the message has a content
|
||||
if(xHTML || body) {
|
||||
if(has_body === true) {
|
||||
var filteredMessage;
|
||||
var html_escape = true;
|
||||
|
||||
|
@ -1508,7 +1512,7 @@ var Message = (function () {
|
|||
|
||||
// Message marker?
|
||||
if(Markers.hasResponseMarker(node)) {
|
||||
return Markers.handle(from, node);
|
||||
return Markers.handle(from, node, false, is_groupchat_user);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -20,6 +20,10 @@ var Muji = (function() {
|
|||
var self = {};
|
||||
|
||||
|
||||
/* Constants */
|
||||
self.INVITE_MAX_DELAY = 60;
|
||||
|
||||
|
||||
/* Variables */
|
||||
self._session = null;
|
||||
self._caller_xid = null;
|
||||
|
@ -1020,6 +1024,16 @@ var Muji = (function() {
|
|||
|
||||
try {
|
||||
if(!Call.is_ongoing()) {
|
||||
// Outdated invite?
|
||||
var invite_delay = DateUtils.readMessageDelay(stanza.getNode(), true);
|
||||
var date_now = DateUtils.getTimeStamp();
|
||||
|
||||
if(invite_delay &&
|
||||
(date_now - DateUtils.extractStamp(invite_delay)) >= self.INVITE_MAX_DELAY) {
|
||||
Console.warn('Muji.receive', 'Discarded outdated invite from: ' + Common.getStanzaFrom(stanza));
|
||||
return;
|
||||
}
|
||||
|
||||
// Create call session
|
||||
self._new(
|
||||
args.jid,
|
||||
|
@ -1102,9 +1116,10 @@ var Muji = (function() {
|
|||
/**
|
||||
* Stops current Muji call
|
||||
* @public
|
||||
* @param {boolean} abort
|
||||
* @return {boolean}
|
||||
*/
|
||||
self.stop = function() {
|
||||
self.stop = function(abort) {
|
||||
|
||||
try {
|
||||
// Reset interface
|
||||
|
@ -1112,7 +1127,12 @@ var Muji = (function() {
|
|||
|
||||
// Stop Muji session
|
||||
if(self._session !== null) {
|
||||
if(abort === true) {
|
||||
self._session.abort();
|
||||
self._session.get_session_leave_error(self._session, null);
|
||||
} else {
|
||||
self._session.leave();
|
||||
}
|
||||
|
||||
Console.debug('Stopping current Muji call...');
|
||||
} else {
|
||||
|
@ -1326,7 +1346,7 @@ var Muji = (function() {
|
|||
'text': Common._e("Decline"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode) {
|
||||
self._session.abort();
|
||||
self.stop(true);
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
}
|
||||
|
@ -1350,7 +1370,7 @@ var Muji = (function() {
|
|||
'text': Common._e("Decline"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode) {
|
||||
self._session.abort();
|
||||
self.stop(true);
|
||||
Audio.stop('incoming-call');
|
||||
}
|
||||
}
|
||||
|
@ -1365,7 +1385,7 @@ var Muji = (function() {
|
|||
'text': Common._e("Cancel"),
|
||||
'color': 'red',
|
||||
'cb': function(xid, mode) {
|
||||
self._session.abort();
|
||||
self.stop(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1510,8 +1530,10 @@ var Muji = (function() {
|
|||
'<div class="chatroom">' +
|
||||
'<div class="chatroom_participants">' +
|
||||
'<div class="participants_default_view">' +
|
||||
'<div class="participants_default_details">' +
|
||||
'<span class="participants_counter">' + Common.printf(Common._e("%s participants"), 0) + '</span>' +
|
||||
'<span class="participants_full">' + Common._e("(full)") + '</span>' +
|
||||
'</div>' +
|
||||
|
||||
'<a class="participants_invite call-images" href="#" title="' + Common._e("Invite people...") + '"></a>' +
|
||||
'</div>' +
|
||||
|
@ -1524,10 +1546,9 @@ var Muji = (function() {
|
|||
'<input class="invite_xid input-reset" name="xid" type="text" placeholder="' + Common._e("Enter people names...") + '" autocomplete="off" />' +
|
||||
'</div>' +
|
||||
|
||||
'<span class="invite_validate">' +
|
||||
'<span class="invite_separator"></span>' +
|
||||
'<a class="invite_go call-images" href="#"></a>' +
|
||||
'</span>' +
|
||||
'<a class="invite_validate" href="#">' +
|
||||
'<span class="invite_validate_icon call-images"></span>' +
|
||||
'</a>' +
|
||||
'</form>' +
|
||||
|
||||
'<div class="participants_invite_search"></div>' +
|
||||
|
@ -1759,7 +1780,7 @@ var Muji = (function() {
|
|||
});
|
||||
|
||||
// Invite form validate event
|
||||
participants_invite_validate.find('.invite_go').click(function() {
|
||||
participants_invite_validate.click(function() {
|
||||
try {
|
||||
participants_invite_form.submit();
|
||||
} catch(_e) {
|
||||
|
|
|
@ -311,7 +311,7 @@ var Talk = (function () {
|
|||
Presence.first_sent = false;
|
||||
Search.search_filtered = false;
|
||||
Avatar.pending = [];
|
||||
JOIN_SUGGEST = [];
|
||||
Groupchat.join_suggest = [];
|
||||
|
||||
// Kill all timers, exept the board ones
|
||||
$('*:not(#board .one-board)').stopTime();
|
||||
|
|
|
@ -359,46 +359,31 @@ html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box
|
|||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate {
|
||||
background: #f9f9f9;
|
||||
border: 1px solid #e7e7e7;
|
||||
color: #94a6aa;
|
||||
text-decoration: none;
|
||||
padding: 4px 6px 5px 6px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 9px;
|
||||
-moz-border-radius: 1px;
|
||||
-webkit-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go {
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate:active {
|
||||
padding-top: 5px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_validate_icon {
|
||||
background-position: 0 -329px;
|
||||
width: 14px;
|
||||
height: 11px;
|
||||
opacity: 0.6;
|
||||
margin-top: 2px;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 11px;
|
||||
right: 16px;
|
||||
}
|
||||
|
||||
html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go {
|
||||
right: auto;
|
||||
left: 8px;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go:hover,
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go:active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator,
|
||||
#muji .chatroom form.chatroom_form .message_separator {
|
||||
background: #e9e9e9;
|
||||
width: 1px;
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
bottom: 6px;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator {
|
||||
right: 40px;
|
||||
}
|
||||
|
||||
html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator {
|
||||
right: auto;
|
||||
left: 32px;
|
||||
}
|
||||
|
||||
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_input_container {
|
||||
|
@ -672,6 +657,11 @@ html[dir="rtl"] #muji .chatroom form.chatroom_form .message_icon {
|
|||
}
|
||||
|
||||
#muji .chatroom form.chatroom_form .message_separator {
|
||||
background: #e9e9e9;
|
||||
width: 1px;
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
bottom: 6px;
|
||||
left: 40px;
|
||||
}
|
||||
|
||||
|
|
|
@ -571,13 +571,15 @@ html[dir="rtl"] .call-content .call-notify .avatar-pane .avatar-container .avata
|
|||
bottom: 8px;
|
||||
}
|
||||
|
||||
.call-content .call-notify.notify-call_audio .avatar-pane .icon {
|
||||
.call-content .call-notify.notify-call_audio .avatar-pane .icon,
|
||||
.call-content .call-notify.notify-broadcast_audio .avatar-pane .icon {
|
||||
background-position: 0 -120px;
|
||||
width: 33px;
|
||||
height: 33px;
|
||||
}
|
||||
|
||||
.call-content .call-notify.notify-call_video .avatar-pane .icon {
|
||||
.call-content .call-notify.notify-call_video .avatar-pane .icon,
|
||||
.call-content .call-notify.notify-broadcast_video .avatar-pane .icon {
|
||||
background-position: 0 -154px;
|
||||
width: 33px;
|
||||
height: 22px;
|
||||
|
|
Binary file not shown.
|
@ -4,10 +4,11 @@
|
|||
# License: AGPL
|
||||
# Authors: Valérian Saliou, JanCBorchardt
|
||||
# Translators:
|
||||
# sahwar <ve4ernik@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Jappix\n"
|
||||
"PO-Revision-Date: 2014-05-08 10:20+0100\n"
|
||||
"PO-Revision-Date: 2014-10-13 10:45+0100\n"
|
||||
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/jappix/"
|
||||
"language/bg/)\n"
|
||||
|
@ -17,7 +18,7 @@ msgstr ""
|
|||
"Language: bg\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"X-Generator: Poedit 1.6.5\n"
|
||||
"X-Generator: Poedit 1.6.9\n"
|
||||
|
||||
msgid "default:LTR"
|
||||
msgstr "default:LTR"
|
||||
|
@ -60,12 +61,12 @@ msgid "Find a public Jappix node."
|
|||
msgstr ""
|
||||
|
||||
msgid "Credits"
|
||||
msgstr ""
|
||||
msgstr "Благодарности"
|
||||
|
||||
msgid "Association"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web agency"
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal"
|
||||
|
@ -84,10 +85,10 @@ msgid "Node owner"
|
|||
msgstr ""
|
||||
|
||||
msgid "By using our service, you accept %s."
|
||||
msgstr ""
|
||||
msgstr "Като използвате нашата услуга, вие приемате %s."
|
||||
|
||||
msgid "our terms of use"
|
||||
msgstr ""
|
||||
msgstr "нашите условия за ползване"
|
||||
|
||||
msgid ""
|
||||
"Jappix has been interrupted by a network issue, a bug or bad login (check "
|
||||
|
@ -199,6 +200,21 @@ msgstr "Добяване на приятел"
|
|||
msgid "Your groupchats"
|
||||
msgstr "Вашите групови чатове"
|
||||
|
||||
msgid "Audio/video conference"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launch a group call"
|
||||
msgstr ""
|
||||
|
||||
msgid "Audio conference"
|
||||
msgstr "Аудио конференция"
|
||||
|
||||
msgid "Video conference"
|
||||
msgstr "Видео конференция"
|
||||
|
||||
msgid "Conference call"
|
||||
msgstr "Конферетно обаждане"
|
||||
|
||||
msgid "Manage your favorite groupchats"
|
||||
msgstr "Управление на любимите ви групови чатове"
|
||||
|
||||
|
@ -254,7 +270,7 @@ msgid "Busy"
|
|||
msgstr "зает"
|
||||
|
||||
msgid "Offline"
|
||||
msgstr ""
|
||||
msgstr "извън линия"
|
||||
|
||||
msgid "Mood"
|
||||
msgstr "Настроение"
|
||||
|
@ -457,22 +473,22 @@ msgid "Message archiving"
|
|||
msgstr "Архивиране на съобщенията"
|
||||
|
||||
msgid "Store an history of your chats"
|
||||
msgstr ""
|
||||
msgstr "Запис на историята на вашите чатове"
|
||||
|
||||
msgid "Geolocation"
|
||||
msgstr "Геолокация"
|
||||
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
msgstr "Изключено"
|
||||
|
||||
msgid "Store all chats"
|
||||
msgstr ""
|
||||
msgstr "Запис на всички чатове"
|
||||
|
||||
msgid "Store friend chats"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remove all archives"
|
||||
msgstr ""
|
||||
msgstr "Премахване на всички архиви"
|
||||
|
||||
msgid "Empty"
|
||||
msgstr "Празно"
|
||||
|
@ -571,7 +587,7 @@ msgid "Underlined text"
|
|||
msgstr "Подчертан текст"
|
||||
|
||||
msgid "Send a file"
|
||||
msgstr ""
|
||||
msgstr "Изпращане на файл"
|
||||
|
||||
msgid ""
|
||||
"Once uploaded, your friend will be prompted to download the file you sent."
|
||||
|
@ -613,7 +629,7 @@ msgid "All tabs"
|
|||
msgstr "Всички подпрозорци (табове)"
|
||||
|
||||
msgid "Join groupchat"
|
||||
msgstr ""
|
||||
msgstr "Присъединяване към групов чат"
|
||||
|
||||
msgid "Close this tab"
|
||||
msgstr "Затваряне на подпрозореца (таба)"
|
||||
|
@ -817,10 +833,10 @@ msgid "left the chat room"
|
|||
msgstr "напусна чат стаята"
|
||||
|
||||
msgid "%s left"
|
||||
msgstr ""
|
||||
msgstr "%s напусна чата"
|
||||
|
||||
msgid "%s joined"
|
||||
msgstr ""
|
||||
msgstr "%s се присъедини към чата"
|
||||
|
||||
msgid "no status"
|
||||
msgstr "без статус"
|
||||
|
@ -841,6 +857,8 @@ msgid ""
|
|||
"Jappix is an open social platform, that let's you easily get or keep in "
|
||||
"touch with everyone."
|
||||
msgstr ""
|
||||
"Jappix е отворена социална платформа, която ви позволява лесно да поддържате "
|
||||
"връзка с всекиго."
|
||||
|
||||
msgid ""
|
||||
"Join the millions of users who are currently using the XMPP Network (Google "
|
||||
|
@ -855,7 +873,7 @@ msgid "Hi there!"
|
|||
msgstr "Ей, ти там, здравей!"
|
||||
|
||||
msgid "Welcome to %1s, “%2s”."
|
||||
msgstr ""
|
||||
msgstr "Добре дошли в %1s, „%2s“."
|
||||
|
||||
msgid "Login to your existing XMPP account or create a new one for free!"
|
||||
msgstr ""
|
||||
|
@ -999,7 +1017,7 @@ msgid "would like to get authorization."
|
|||
msgstr "желае да получи пълномощно."
|
||||
|
||||
msgid "would like to send you a file: “%s”."
|
||||
msgstr ""
|
||||
msgstr "желае да ви изпрати файл: „%s“."
|
||||
|
||||
msgid "has received a file exchange request: “%s”."
|
||||
msgstr ""
|
||||
|
@ -1053,13 +1071,13 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
msgstr "Отваряне"
|
||||
|
||||
msgid "Show"
|
||||
msgstr ""
|
||||
msgstr "Показване"
|
||||
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
msgstr "Скриване"
|
||||
|
||||
msgid "Submit"
|
||||
msgstr "Изпращане"
|
||||
|
@ -1194,7 +1212,7 @@ msgid "Media integration"
|
|||
msgstr "Медийна интеграция"
|
||||
|
||||
msgid "Keep local chat archives"
|
||||
msgstr ""
|
||||
msgstr "Пазене на локални архиви на чата"
|
||||
|
||||
msgid "XMPP links"
|
||||
msgstr "XMPP връзки"
|
||||
|
@ -2361,12 +2379,24 @@ msgstr ""
|
|||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Leave"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
msgid "Unmute"
|
||||
msgstr ""
|
||||
|
||||
msgid "Nobody there. Invite some people!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invite people..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter people names..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Is calling you"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2406,6 +2436,24 @@ msgstr ""
|
|||
msgid "Ending call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Incoming group call"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Connecting to group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Group call error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ending group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Group call ended"
|
||||
msgstr ""
|
||||
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2423,3 +2471,51 @@ msgstr ""
|
|||
|
||||
msgid "Video Call"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "(full)"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s is able to receive group calls."
|
||||
msgstr ""
|
||||
|
||||
msgid "%s may not support group calls."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send a message..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Edited"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edited (%s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "Being edited"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delivered"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sending..."
|
||||
msgstr ""
|
||||
|
||||
msgid "%s requested your attention to the conversation"
|
||||
msgstr ""
|
||||
|
||||
msgid "You requested %s's attention to the conversation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attention to conversation requested."
|
||||
msgstr ""
|
||||
|
|
|
@ -54,7 +54,7 @@ msgstr ""
|
|||
msgid "Association"
|
||||
msgstr ""
|
||||
|
||||
msgid "Web agency"
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
msgid "Legal"
|
||||
|
@ -2091,6 +2091,12 @@ msgstr ""
|
|||
msgid "Waiting..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Proposing call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "No answer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ringing..."
|
||||
msgstr ""
|
||||
|
||||
|
|
Binary file not shown.
|
@ -11,7 +11,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Jappix\n"
|
||||
"PO-Revision-Date: 2014-05-29 17:06+0100\n"
|
||||
"PO-Revision-Date: 2014-10-13 10:45+0100\n"
|
||||
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
|
||||
"Language-Team: French (http://www.transifex.com/projects/p/jappix/language/"
|
||||
"fr/)\n"
|
||||
|
@ -21,7 +21,7 @@ msgstr ""
|
|||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"X-Generator: Poedit 1.6.5\n"
|
||||
"X-Generator: Poedit 1.6.9\n"
|
||||
|
||||
msgid "default:LTR"
|
||||
msgstr "default:LTR"
|
||||
|
@ -69,8 +69,8 @@ msgstr "Crédits"
|
|||
msgid "Association"
|
||||
msgstr "Association"
|
||||
|
||||
msgid "Web agency"
|
||||
msgstr "Agence Web"
|
||||
msgid "Company"
|
||||
msgstr "Entreprise"
|
||||
|
||||
msgid "Legal"
|
||||
msgstr "Légal"
|
||||
|
@ -198,6 +198,21 @@ msgstr "Ajouter un ami"
|
|||
msgid "Your groupchats"
|
||||
msgstr "Vos salons de discussion"
|
||||
|
||||
msgid "Audio/video conference"
|
||||
msgstr "Conférence audio/vidéo"
|
||||
|
||||
msgid "Launch a group call"
|
||||
msgstr "Lancer un appel de groupe"
|
||||
|
||||
msgid "Audio conference"
|
||||
msgstr "Conférence audio"
|
||||
|
||||
msgid "Video conference"
|
||||
msgstr "Conférence vidéo"
|
||||
|
||||
msgid "Conference call"
|
||||
msgstr "Appel de groupe"
|
||||
|
||||
msgid "Manage your favorite groupchats"
|
||||
msgstr "Gérer mes salons favoris"
|
||||
|
||||
|
@ -2387,12 +2402,24 @@ msgstr "Slot AdSense"
|
|||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
||||
msgid "Leave"
|
||||
msgstr "Partir"
|
||||
|
||||
msgid "Mute"
|
||||
msgstr "Muet"
|
||||
|
||||
msgid "Unmute"
|
||||
msgstr "Audible"
|
||||
|
||||
msgid "Nobody there. Invite some people!"
|
||||
msgstr "Il n'y a personne. Invitez du monde !"
|
||||
|
||||
msgid "Invite people..."
|
||||
msgstr "Inviter des personnes..."
|
||||
|
||||
msgid "Enter people names..."
|
||||
msgstr "Entrez les noms..."
|
||||
|
||||
msgid "Is calling you"
|
||||
msgstr "Vous appelle"
|
||||
|
||||
|
@ -2432,6 +2459,24 @@ msgstr "Est déjà en appel"
|
|||
msgid "Ending call..."
|
||||
msgstr "Fin de l'appel..."
|
||||
|
||||
msgid "Incoming group call"
|
||||
msgstr "Appel de groupe"
|
||||
|
||||
msgid "Preparing group call..."
|
||||
msgstr "Préparation de l'appel..."
|
||||
|
||||
msgid "Connecting to group call..."
|
||||
msgstr "Connexion à l'appel..."
|
||||
|
||||
msgid "Group call error"
|
||||
msgstr "Erreur d'appel"
|
||||
|
||||
msgid "Ending group call..."
|
||||
msgstr "Fin de l'appel..."
|
||||
|
||||
msgid "Group call ended"
|
||||
msgstr "Appel terminé"
|
||||
|
||||
msgid "Accept"
|
||||
msgstr "Accepter"
|
||||
|
||||
|
@ -2450,6 +2495,24 @@ msgstr "Appel Audio"
|
|||
msgid "Video Call"
|
||||
msgstr "Appel Vidéo"
|
||||
|
||||
msgid "%s participant"
|
||||
msgstr "%s participant"
|
||||
|
||||
msgid "%s participants"
|
||||
msgstr "%s participants"
|
||||
|
||||
msgid "(full)"
|
||||
msgstr "(maxi)"
|
||||
|
||||
msgid "%s is able to receive group calls."
|
||||
msgstr "%s peut recevoir des appels de groupe."
|
||||
|
||||
msgid "%s may not support group calls."
|
||||
msgstr "%s ne semble pas supporter les appels de groupe."
|
||||
|
||||
msgid "Send a message..."
|
||||
msgstr "Envoyer un message..."
|
||||
|
||||
msgid "Edited"
|
||||
msgstr "Édité"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -10,7 +10,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Jappix\n"
|
||||
"PO-Revision-Date: 2014-05-08 10:21+0100\n"
|
||||
"PO-Revision-Date: 2014-08-09 15:36+0100\n"
|
||||
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
|
||||
"Language-Team: Hebrew (http://www.transifex.com/projects/p/jappix/language/"
|
||||
"he/)\n"
|
||||
|
@ -36,7 +36,7 @@ msgid "Social channel, chat and more."
|
|||
msgstr "ערוץ חברתי, צ'אט ועוד."
|
||||
|
||||
msgid "Create your public profile."
|
||||
msgstr "צור את הדיקן הפומבי שלך."
|
||||
msgstr "צור דיקן פומבי משלך."
|
||||
|
||||
msgid "A mini-chat for your website."
|
||||
msgstr "מיני צ'אט עבור אתר הרשת שלך."
|
||||
|
@ -60,7 +60,7 @@ msgid "Jappix for your company."
|
|||
msgstr "Jappix עבור הפירמה שלך."
|
||||
|
||||
msgid "Find a public Jappix node."
|
||||
msgstr "מצא נקודת ממסר Jappix פומבית."
|
||||
msgstr "מצא צומת Jappix פומבי."
|
||||
|
||||
msgid "Credits"
|
||||
msgstr "תודות"
|
||||
|
@ -84,7 +84,7 @@ msgid "Owner"
|
|||
msgstr "בעלים"
|
||||
|
||||
msgid "Node owner"
|
||||
msgstr "בעל הממסר"
|
||||
msgstr "בעל צומת"
|
||||
|
||||
msgid "By using our service, you accept %s."
|
||||
msgstr "על ידי שימוש בשירותנו, הינך מסכים/ה %s."
|
||||
|
@ -144,7 +144,7 @@ msgid "Register"
|
|||
msgstr "הרשמה"
|
||||
|
||||
msgid "Here we go!"
|
||||
msgstr "קדימה לדרך!"
|
||||
msgstr "המשך!"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "שרת"
|
||||
|
@ -186,6 +186,21 @@ msgstr "הוספת חברים"
|
|||
msgid "Your groupchats"
|
||||
msgstr "שיחות הקבוצה שלך"
|
||||
|
||||
msgid "Audio/video conference"
|
||||
msgstr "ועידת אודיו/וידאו"
|
||||
|
||||
msgid "Launch a group call"
|
||||
msgstr "שגר שיחה קבוצתית"
|
||||
|
||||
msgid "Audio conference"
|
||||
msgstr "ועידה קולית"
|
||||
|
||||
msgid "Video conference"
|
||||
msgstr "ועידה חזותית"
|
||||
|
||||
msgid "Conference call"
|
||||
msgstr "שיחת ועידה"
|
||||
|
||||
msgid "Manage your favorite groupchats"
|
||||
msgstr "ניהול שיחות הקבוצה המועדפות עליך"
|
||||
|
||||
|
@ -1571,7 +1586,7 @@ msgstr "משתמשים"
|
|||
msgid ""
|
||||
"This is a restricted area: only the authorized users can manage this Jappix "
|
||||
"node."
|
||||
msgstr "זהו אזור מוגבל: רק משתמשים מורשים יכולים לנהל את ממסר Jappix זה."
|
||||
msgstr "זהו אזור מוגבל: רק משתמשים מורשים יכולים לנהל את צומת Jappix זה."
|
||||
|
||||
msgid "Please use the form below to login to the administration panel."
|
||||
msgstr "אנא השתמש בתבנית שלמטה כדי להתחבר את לוח הניהול."
|
||||
|
@ -1602,16 +1617,16 @@ msgstr ""
|
|||
"אותן למטה."
|
||||
|
||||
msgid "Change your Jappix node configuration with this tool."
|
||||
msgstr "שינוי תצורת ממסר Jappix בעזרת כלי זה."
|
||||
msgstr "שינוי תצורת צומת Jappix בעזרת כלי זה."
|
||||
|
||||
msgid "Change the XMPP hosts that this Jappix node serves with this tool."
|
||||
msgstr "שנה מארחי XMPP שממסר Jappix זה משרת, בעזרת כלי זה."
|
||||
msgstr "שנה מארחי XMPP אשר צומת Jappix זה משרת, בעזרת כלי זה."
|
||||
|
||||
msgid ""
|
||||
"All this Jappix node stored files can be managed with this tool: please "
|
||||
"select a sub-folder and start editing its content!"
|
||||
msgstr ""
|
||||
"כל הקבצים אשר מאוחסנים בממסר Jappix זה יכולים להתנהל בעזרת כלי זה: אנא בחר "
|
||||
"כל הקבצים אשר מאוחסנים בצומת Jappix זה יכולים להתנהל בעזרת כלי זה: אנא בחר "
|
||||
"תיקיית משנה ולאחר מכן תעמוד לרשותך האפשרות להתחיל לערוך את התוכן שלה!"
|
||||
|
||||
msgid "Jappix is fully customisable: you can change its design right here."
|
||||
|
@ -1663,14 +1678,14 @@ msgid ""
|
|||
"You can define more than one administrator for this Jappix node. You can "
|
||||
"also change a password with this tool."
|
||||
msgstr ""
|
||||
"ניתן לתחום יותר ממנהלן אחד עבור ממסר Jappix זה. ניתן גם לשנות את הסיסמה "
|
||||
"בעזרת כלי זה."
|
||||
"באפשרותך לתחום יותר מאשר מנהלן אחד עבור צומת Jappix זה. באפשרותך גם לשנות את "
|
||||
"הסיסמה בעזרת כלי זה."
|
||||
|
||||
msgid ""
|
||||
"Update your Jappix node with this tool, or check if a new one is available. "
|
||||
"Informations about the latest version are also displayed (in english)."
|
||||
msgstr ""
|
||||
"עדכון ממסר Jappix בעזרת כלי זה, לחלופין ניתן לבדוק אם ממסר חדש זמין כעת. "
|
||||
"עדכון צומת Jappix בעזרת כלי זה, לחלופין ניתן לבדוק אם ממסר חדש זמין כעת. "
|
||||
"מידע אודות הגרסה האחרונה גם כן מוצג (באנגלית)."
|
||||
|
||||
msgid "Access statistics"
|
||||
|
@ -1770,7 +1785,7 @@ msgid ""
|
|||
"Change your Jappix node background with this tool. You can either set a "
|
||||
"custom color or an uploaded image. Let your creativity flow!"
|
||||
msgstr ""
|
||||
"שינוי רקע ממסר Jappix בעזרת כלי זה. ניתן להגדיר צבע מותאם או להעלות תמונה. "
|
||||
"שינוי רקע צומת Jappix בעזרת כלי זה. ניתן להגדיר צבע מותאם או להעלות תמונה. "
|
||||
"התירו ליצירתיות לזרום!"
|
||||
|
||||
msgid "Use default background"
|
||||
|
@ -1934,7 +1949,7 @@ msgstr "תיקיית האחסון שרצית לטהר, הינה ריקה כעת!
|
|||
|
||||
msgid ""
|
||||
"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
|
||||
msgstr "שמור על ממסר Jappix רענן ומהיר, על ידי טיהור תיקיות האחסון בקביעות!"
|
||||
msgstr "שמור על צומת Jappix רענן ומהיר, על ידי טיהור תיקיות האחסון בקביעות!"
|
||||
|
||||
msgid ""
|
||||
"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
|
||||
|
@ -2296,12 +2311,24 @@ msgstr "משבצת AdSense"
|
|||
msgid "Stop"
|
||||
msgstr "עצור"
|
||||
|
||||
msgid "Leave"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mute"
|
||||
msgstr "השתק"
|
||||
|
||||
msgid "Unmute"
|
||||
msgstr "בטל השתקה"
|
||||
|
||||
msgid "Nobody there. Invite some people!"
|
||||
msgstr "אף אחד לא נמצא שם. הזמן כמה אנשים!"
|
||||
|
||||
msgid "Invite people..."
|
||||
msgstr "הזמנת אנשים..."
|
||||
|
||||
msgid "Enter people names..."
|
||||
msgstr "הזנת שמות אנשים..."
|
||||
|
||||
msgid "Is calling you"
|
||||
msgstr "מחייג/ת אליך"
|
||||
|
||||
|
@ -2309,7 +2336,7 @@ msgid "Initiating call"
|
|||
msgstr "מתחיל כעת קריאה"
|
||||
|
||||
msgid "Connecting to call..."
|
||||
msgstr "כעת מתחבר אל קריאה..."
|
||||
msgstr "כעת מתחבר אל שיחה..."
|
||||
|
||||
msgid "Waiting..."
|
||||
msgstr "כעת ממתין..."
|
||||
|
@ -2341,6 +2368,24 @@ msgstr "כבר בעיצומה של שיחה"
|
|||
msgid "Ending call..."
|
||||
msgstr "כעת מסיים שיחה..."
|
||||
|
||||
msgid "Incoming group call"
|
||||
msgstr "שיחת קבוצה נכנסת"
|
||||
|
||||
msgid "Preparing group call..."
|
||||
msgstr "כעת מכין שיחת קבוצה..."
|
||||
|
||||
msgid "Connecting to group call..."
|
||||
msgstr "כעת מתחבר אל שיחת קבוצה..."
|
||||
|
||||
msgid "Group call error"
|
||||
msgstr "שגיאת שיחת קבוצה"
|
||||
|
||||
msgid "Ending group call..."
|
||||
msgstr "כעת מסיים שיחת קבוצה..."
|
||||
|
||||
msgid "Group call ended"
|
||||
msgstr "שיחת קבוצה הסתיימה"
|
||||
|
||||
msgid "Accept"
|
||||
msgstr "קבל"
|
||||
|
||||
|
@ -2354,7 +2399,55 @@ msgid "Retry"
|
|||
msgstr "נסה שוב"
|
||||
|
||||
msgid "Audio Call"
|
||||
msgstr "שיחה קולית (אודיו)"
|
||||
msgstr "שיחה קולית"
|
||||
|
||||
msgid "Video Call"
|
||||
msgstr "שיחה חזותית (וידאו)"
|
||||
msgstr "שיחה חזותית"
|
||||
|
||||
msgid "%s participant"
|
||||
msgstr "משתתף %s"
|
||||
|
||||
msgid "%s participants"
|
||||
msgstr "%s משתתפים"
|
||||
|
||||
msgid "(full)"
|
||||
msgstr "(מלא)"
|
||||
|
||||
msgid "%s is able to receive group calls."
|
||||
msgstr "%s מסוגל/ת לקבל שיחות קבוצתיות."
|
||||
|
||||
msgid "%s may not support group calls."
|
||||
msgstr "%s עשוי שלא לתמוך בשיחות קבוצתיות."
|
||||
|
||||
msgid "Send a message..."
|
||||
msgstr "שליחת הודעה..."
|
||||
|
||||
msgid "Edited"
|
||||
msgstr ""
|
||||
|
||||
msgid "Edited (%s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "Being edited"
|
||||
msgstr ""
|
||||
|
||||
msgid "Delivered"
|
||||
msgstr ""
|
||||
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
msgid "Sending..."
|
||||
msgstr "כעת שולח..."
|
||||
|
||||
msgid "%s requested your attention to the conversation"
|
||||
msgstr "%s ביקש/ה את תשומת לבך אל הדיון"
|
||||
|
||||
msgid "You requested %s's attention to the conversation"
|
||||
msgstr "ביקשת את הסבת צומת הלב של %s אל הדיון"
|
||||
|
||||
msgid "Attention to conversation requested."
|
||||
msgstr "הסבת צומת לב אל הדיון התבקשה."
|
||||
|
|
Binary file not shown.
|
@ -4,13 +4,13 @@
|
|||
# License: AGPL
|
||||
# Authors: Valérian Saliou, JanCBorchardt
|
||||
# Translators:
|
||||
# DonIncognito <joe.brendel.ronck@gmail.com>, 2013
|
||||
# Joé BRENDEL <joe.brendel.ronck@gmail.com>, 2013
|
||||
# Kahr Patrick <patrick@nerds.lu>, 2013-2014
|
||||
# Tullius, 2013
|
||||
# Thull Michel, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Jappix\n"
|
||||
"PO-Revision-Date: 2014-05-08 10:21+0100\n"
|
||||
"PO-Revision-Date: 2014-08-09 15:36+0100\n"
|
||||
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
|
||||
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/jappix/"
|
||||
"language/lb/)\n"
|
||||
|
@ -190,6 +190,21 @@ msgstr "E Kolleg adden"
|
|||
msgid "Your groupchats"
|
||||
msgstr "Deng Gruppenchats"
|
||||
|
||||
msgid "Audio/video conference"
|
||||
msgstr ""
|
||||
|
||||
msgid "Launch a group call"
|
||||
msgstr ""
|
||||
|
||||
msgid "Audio conference"
|
||||
msgstr ""
|
||||
|
||||
msgid "Video conference"
|
||||
msgstr ""
|
||||
|
||||
msgid "Conference call"
|
||||
msgstr ""
|
||||
|
||||
msgid "Manage your favorite groupchats"
|
||||
msgstr "Organiséier deng Gruppenchats"
|
||||
|
||||
|
@ -852,7 +867,7 @@ msgid "Hi there!"
|
|||
msgstr "Moien!"
|
||||
|
||||
msgid "Welcome to %1s, “%2s”."
|
||||
msgstr ""
|
||||
msgstr "Wëllkomm op %1s, \"%2s\"."
|
||||
|
||||
msgid "Login to your existing XMPP account or create a new one for free!"
|
||||
msgstr ""
|
||||
|
@ -1215,7 +1230,7 @@ msgid "Friends"
|
|||
msgstr "Kollegen"
|
||||
|
||||
msgid "Welcome to Jappix, your own social cloud!"
|
||||
msgstr ""
|
||||
msgstr "Wëllkomm op Jappix, denger eegener sozialer Cloud+"
|
||||
|
||||
msgid ""
|
||||
"Before you start using it, you will have to change some settings, search for "
|
||||
|
@ -1250,10 +1265,10 @@ msgid ""
|
|||
"When you will press the save button, the profile editor will be opened. "
|
||||
"Happy socializing!"
|
||||
msgstr ""
|
||||
"Wann dier op Späicheren dréckt geet den Profileditor op. Happy socializing!"
|
||||
"Wanns du op Späicheren drécks geet den Profileditor op. Happy socializing!"
|
||||
|
||||
msgid "Share Jappix on %s"
|
||||
msgstr "Deelt Jappix op %s"
|
||||
msgstr "Deel Jappix op %s"
|
||||
|
||||
msgid "Follow Jappix topic on %s"
|
||||
msgstr "Jappix op %s followen"
|
||||
|
@ -1280,7 +1295,7 @@ msgid "Jappix installation"
|
|||
msgstr "Jappix-Installatioun"
|
||||
|
||||
msgid "Welcome to the Jappix installation!"
|
||||
msgstr "Moien fir d'Installatioun vun Jappix!"
|
||||
msgstr "Wëlkomm bei der Installatioun vun Jappix!"
|
||||
|
||||
msgid ""
|
||||
"This tool will help you installing Jappix, the first full-featured XMPP-"
|
||||
|
@ -1296,7 +1311,7 @@ msgid "Welcome"
|
|||
msgstr "Moien"
|
||||
|
||||
msgid "Storage configuration"
|
||||
msgstr "Späicher Konfiguratioun"
|
||||
msgstr "Späicher-Konfiguratioun"
|
||||
|
||||
msgid "Administrator account"
|
||||
msgstr "Administrator-Kont"
|
||||
|
@ -1326,7 +1341,7 @@ msgstr ""
|
|||
|
||||
msgid "It's time to build your own social cloud: just go to the next step!"
|
||||
msgstr ""
|
||||
"Et as Zäit fier Äer eegen Social Cloud opzebauen: weider bei dee nächste "
|
||||
"Et as Zäit fier deng eegen Social Cloud opzebauen: weider bei dee nächste "
|
||||
"Schrëtt!"
|
||||
|
||||
msgid ""
|
||||
|
@ -1346,22 +1361,22 @@ msgstr ""
|
|||
"Besëtzer vum Uerdner op %3s setzen (Hängt vun denger Konfiguratioun of)."
|
||||
|
||||
msgid "The folder is writable, you can continue!"
|
||||
msgstr "An desen Uerdner kënnt Der schreiwen, Dier kënnt weidermaachen!"
|
||||
msgstr "Du hues d'Schreiwrechter fier dësen Uerdner, du kanns weidermaachen!"
|
||||
|
||||
msgid ""
|
||||
"Jappix offers you the possibility to manage your configuration, install new "
|
||||
"plugins or search for updates. That's why you must create an administrator "
|
||||
"account to access the manager."
|
||||
msgstr ""
|
||||
"Jappix gëtt Iech d'Méiglechkeet fier äer Astellungen ze geréieren, nei "
|
||||
"Plugins ze installéieren oder no Updates ze sichen. Dofier musst dier en "
|
||||
"Jappix gëtt Dier d'Méiglechkeet fier deng Astellungen ze geréieren, nei "
|
||||
"Plugins ze installéieren oder no Updates ze sichen. Dofier musst de en "
|
||||
"Administrator-Kont opmaachen fier un de Manager ze kommen."
|
||||
|
||||
msgid ""
|
||||
"When Jappix will be installed, just click on the manager link on the home "
|
||||
"page to access it."
|
||||
msgstr ""
|
||||
"Wann Jappix installéiert gëtt, klickt op de Manager-Link op der Haaptsäit "
|
||||
"Wann Jappix bis installéiert as, klick op de Manager-Link op der Haaptsäit "
|
||||
"fier eranzekommen."
|
||||
|
||||
msgid "Oops, you missed something or the two passwords do not match!"
|
||||
|
@ -1527,7 +1542,7 @@ msgid "Finish"
|
|||
msgstr "Fäerdeg"
|
||||
|
||||
msgid "Check again"
|
||||
msgstr "Nach eng Kéier préifen"
|
||||
msgstr "Nach eng Kéier iwwerpréifen"
|
||||
|
||||
msgid ""
|
||||
"The folder is not writable, set the right permissions to the %s directory."
|
||||
|
@ -2376,12 +2391,24 @@ msgstr "AdSense slot"
|
|||
msgid "Stop"
|
||||
msgstr "Stop"
|
||||
|
||||
msgid "Leave"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mute"
|
||||
msgstr "Mute"
|
||||
|
||||
msgid "Unmute"
|
||||
msgstr "Unmute"
|
||||
|
||||
msgid "Nobody there. Invite some people!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Invite people..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Enter people names..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Is calling you"
|
||||
msgstr "Rifft dech un"
|
||||
|
||||
|
@ -2421,6 +2448,24 @@ msgstr "As besat"
|
|||
msgid "Ending call..."
|
||||
msgstr "Uruff beendegen..."
|
||||
|
||||
msgid "Incoming group call"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preparing group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Connecting to group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Group call error"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ending group call..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Group call ended"
|
||||
msgstr ""
|
||||
|
||||
msgid "Accept"
|
||||
msgstr "Unhuelen"
|
||||
|
||||
|
@ -2438,3 +2483,51 @@ msgstr "Uruff"
|
|||
|
||||
msgid "Video Call"
|
||||
msgstr "Video Konferenz"
|
||||
|
||||
msgid "%s participant"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s participants"
|
||||
msgstr ""
|
||||
|
||||
msgid "(full)"
|
||||
msgstr ""
|
||||
|
||||
msgid "%s is able to receive group calls."
|
||||
msgstr ""
|
||||
|
||||
msgid "%s may not support group calls."
|
||||
msgstr ""
|
||||
|
||||
msgid "Send a message..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Edited"
|
||||
msgstr "Editéiert"
|
||||
|
||||
msgid "Edited (%s)"
|
||||
msgstr "editéiert (%s)"
|
||||
|
||||
msgid "Editing"
|
||||
msgstr "editéiert"
|
||||
|
||||
msgid "Being edited"
|
||||
msgstr "gëtt editéiert"
|
||||
|
||||
msgid "Delivered"
|
||||
msgstr "verschéckt"
|
||||
|
||||
msgid "Read"
|
||||
msgstr "liesen"
|
||||
|
||||
msgid "Sending..."
|
||||
msgstr "fortschécken..."
|
||||
|
||||
msgid "%s requested your attention to the conversation"
|
||||
msgstr ""
|
||||
|
||||
msgid "You requested %s's attention to the conversation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Attention to conversation requested."
|
||||
msgstr ""
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -215,8 +215,8 @@ if(!anonymousMode() && !httpAuthEnabled()) { ?>
|
|||
<a class="desc" href="http://www.post-pro.fr/"><?php _e("Association"); ?></a>
|
||||
</span>
|
||||
<span class="one">
|
||||
<a class="name" href="https://frenchtouch.pro/">FrenchTouch</a>
|
||||
<a class="desc" href="https://frenchtouch.pro/"><?php _e("Web agency"); ?></a>
|
||||
<a class="name" href="https://hakuma.holdings/">Hakuma Holdings</a>
|
||||
<a class="desc" href="https://hakuma.holdings/"><?php _e("Company"); ?></a>
|
||||
</span>
|
||||
|
||||
<?php if(hasLegal()) { ?>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "jappix",
|
||||
"description": "Jappix test tools",
|
||||
"version": "1.0.0",
|
||||
"homepage": "http://jappix.org/",
|
||||
"homepage": "https://jappix.org/",
|
||||
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
Loading…
Reference in a new issue