Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
6c2f7c87
Commit
6c2f7c87
authored
Oct 24, 2017
by
Weblate
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
15430a15
f73075d2
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
165 additions
and
133 deletions
+165
-133
3rdparty/moment_locales.js
3rdparty/moment_locales.js
+1
-0
CHANGES.md
CHANGES.md
+1
-0
src/config.js
src/config.js
+1
-0
src/converse-core.js
src/converse-core.js
+20
-131
src/i18n.js
src/i18n.js
+142
-0
src/utils.js
src/utils.js
+0
-2
No files found.
3rdparty/moment_locales.js
View file @
6c2f7c87
...
...
@@ -10,6 +10,7 @@
define
(
"
moment_with_locales
"
,
[
'
moment
'
,
// Everything below can be removed except for moment itself.
'
moment/locale/af
'
,
'
moment/locale/ca
'
,
'
moment/locale/de
'
,
'
moment/locale/es
'
,
'
moment/locale/fr
'
,
...
...
CHANGES.md
View file @
6c2f7c87
...
...
@@ -25,6 +25,7 @@
smaller filesize but means that the translations you want to provide need to
be available. See the
[
locales_url
](
https://conversejs.org/docs/html/configurations.html#locales-url
)
configuration setting for more info.
-
The translation machinery has now been moved to a separate module in
`src/i18n.js`
.
## 3.2.1 (2017-08-29)
...
...
src/config.js
View file @
6c2f7c87
...
...
@@ -26,6 +26,7 @@ require.config({
"
es6-promise
"
:
"
node_modules/es6-promise/dist/es6-promise.auto
"
,
"
eventemitter
"
:
"
node_modules/otr/build/dep/eventemitter
"
,
"
form-utils
"
:
"
src/form-utils
"
,
"
i18n
"
:
"
src/i18n
"
,
"
jed
"
:
"
node_modules/jed/jed
"
,
"
jquery
"
:
"
node_modules/jquery/dist/jquery
"
,
"
jquery.browser
"
:
"
node_modules/jquery.browser/dist/jquery.browser
"
,
...
...
src/converse-core.js
View file @
6c2f7c87
...
...
@@ -10,7 +10,7 @@
"
es6-promise
"
,
"
lodash.noconflict
"
,
"
polyfill
"
,
"
jed
"
,
"
i18n
"
,
"
utils
"
,
"
moment_with_locales
"
,
"
strophe
"
,
...
...
@@ -19,7 +19,7 @@
"
backbone.browserStorage
"
,
"
backbone.overview
"
,
],
factory
);
}(
this
,
function
(
sizzle
,
Promise
,
_
,
polyfill
,
Jed
,
utils
,
moment
,
Strophe
,
pluggable
,
Backbone
)
{
}(
this
,
function
(
sizzle
,
Promise
,
_
,
polyfill
,
i18n
,
utils
,
moment
,
Strophe
,
pluggable
,
Backbone
)
{
/* Cannot use this due to Safari bug.
* See https://github.com/jcbrand/converse.js/issues/196
...
...
@@ -137,11 +137,11 @@
* (String) message - The message to be logged.
* (Integer) level - The loglevel which allows for filtering of log
* messages.
*
*
* Available loglevels are 0 for 'debug', 1 for 'info', 2 for 'warn',
* 3 for 'error' and 4 for 'fatal'.
*
* When using the 'error' or 'warn' loglevels, a full stacktrace will be
* When using the 'error' or 'warn' loglevels, a full stacktrace will be
* logged as well.
*/
if
(
message
instanceof
Error
)
{
...
...
@@ -176,133 +176,19 @@
}
};
// ---------------------
// Translation machinery
// ---------------------
_converse
.
__
=
function
(
str
)
{
/* Translate the given string based on the current locale.
*
* Parameters:
* (String) str - The string to translate.
*/
if
(
_
.
isUndefined
(
Jed
))
{
if
(
_
.
isUndefined
(
i18n
))
{
return
str
;
}
if
(
_
.
isUndefined
(
_converse
.
jed
))
{
return
Jed
.
sprintf
.
apply
(
Jed
,
arguments
);
}
var
t
=
_converse
.
jed
.
translate
(
str
);
if
(
arguments
.
length
>
1
)
{
return
t
.
fetch
.
apply
(
t
,
[].
slice
.
call
(
arguments
,
1
));
}
else
{
return
t
.
fetch
();
}
}
function
detectLocale
(
library_check
)
{
/* Determine which locale is supported by the user's system as well
* as by the relevant library (e.g. converse.js or moment.js).
*
* Parameters:
* (Function) library_check - Returns a boolean indicating whether
* the locale is supported.
*/
var
locale
,
i
;
if
(
window
.
navigator
.
userLanguage
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
userLanguage
,
library_check
);
}
if
(
window
.
navigator
.
languages
&&
!
locale
)
{
for
(
i
=
0
;
i
<
window
.
navigator
.
languages
.
length
&&
!
locale
;
i
++
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
languages
[
i
],
library_check
);
}
}
if
(
window
.
navigator
.
browserLanguage
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
browserLanguage
,
library_check
);
}
if
(
window
.
navigator
.
language
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
language
,
library_check
);
}
if
(
window
.
navigator
.
systemLanguage
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
systemLanguage
,
library_check
);
}
return
locale
||
'
en
'
;
}
function
isMomentLocale
(
locale
)
{
if
(
!
_
.
isString
(
locale
))
{
return
false
;
}
return
moment
.
locale
()
!==
moment
.
locale
(
locale
);
}
function
getLocale
(
preferred_locale
,
isSupportedByLibrary
)
{
if
(
_
.
isString
(
preferred_locale
))
{
if
(
preferred_locale
===
'
en
'
||
isSupportedByLibrary
(
preferred_locale
))
{
return
preferred_locale
;
}
}
return
detectLocale
(
isSupportedByLibrary
)
||
'
en
'
;
return
i18n
.
translate
.
apply
(
i18n
,
arguments
);
}
function
isLocaleAvailable
(
locale
,
available
)
{
/* Check whether the locale or sub locale (e.g. en-US, en) is supported.
*
* Parameters:
* (String) locale - The locale to check for
* (Function) available - returns a boolean indicating whether the locale is supported
*/
if
(
available
(
locale
))
{
return
locale
;
}
else
{
var
sublocale
=
locale
.
split
(
"
-
"
)[
0
];
if
(
sublocale
!==
locale
&&
available
(
sublocale
))
{
return
sublocale
;
}
}
}
function
isLocaleSupported
(
locale
)
{
/* Check whether the passed in locale is supported by Converse
*
* Parameters:
* (String) locale: The given i18n locale
*/
if
(
!
_
.
isString
(
locale
))
{
return
false
;
}
return
_
.
includes
(
_converse
.
locales
,
locale
);
}
function
fetchTranslations
(
locale
,
locale_url
)
{
/* Fetch the translations for the given local at the given URL.
*
* Parameters:
* (String) locale: The given i18n locale
* (String) locale_url: The URL from which the translations should be fetched
*/
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
isLocaleSupported
(
locale
)
||
locale
===
'
en
'
)
{
return
resolve
();
}
const
xhr
=
new
XMLHttpRequest
();
xhr
.
open
(
'
GET
'
,
locale_url
,
true
);
xhr
.
setRequestHeader
(
'
Accept
'
,
"
application/json, text/javascript
"
);
xhr
.
onload
=
function
()
{
if
(
xhr
.
status
>=
200
&&
xhr
.
status
<
400
)
{
resolve
(
new
Jed
(
window
.
JSON
.
parse
(
xhr
.
responseText
)));
}
else
{
xhr
.
onerror
();
}
};
xhr
.
onerror
=
function
()
{
reject
(
xhr
.
statusText
);
};
xhr
.
send
();
});
}
// --------------------------
// END: Translation machinery
// --------------------------
const
__
=
_converse
.
__
;
const
PROMISES
=
[
'
initialized
'
,
...
...
@@ -445,10 +331,12 @@
}
}
/* Internationalization */
moment
.
locale
(
getLocale
(
settings
.
i18n
,
isMomentLocale
));
_converse
.
locale
=
getLocale
(
settings
.
i18n
,
isLocaleSupported
);
const
__
=
_converse
.
__
;
/* Localisation */
if
(
!
_
.
isUndefined
(
i18n
))
{
i18n
.
setLocales
(
settings
.
i18n
,
_converse
);
}
else
{
_converse
.
locale
=
'
en
'
;
}
// Module-level variables
// ----------------------
...
...
@@ -2026,23 +1914,24 @@
}
if
(
!
_
.
isUndefined
(
_converse
.
connection
)
&&
_converse
.
connection
.
service
===
'
jasmine tests
'
)
{
_converse
.
connection
.
service
===
'
jasmine tests
'
)
{
finishInitialization
();
return
_converse
;
}
else
if
(
_
.
isUndefined
(
i18n
))
{
finishInitialization
();
}
else
{
fetchTranslations
(
i18n
.
fetchTranslations
(
_converse
.
locale
,
_converse
.
locales
,
_
.
template
(
_converse
.
locales_url
)({
'
locale
'
:
_converse
.
locale
})
).
then
((
jed
)
=>
{
_converse
.
jed
=
jed
;
).
then
(()
=>
{
finishInitialization
();
}).
catch
((
reason
)
=>
{
finishInitialization
();
_converse
.
log
(
reason
,
Strophe
.
LogLevel
.
ERROR
);
});
return
init_promise
.
promise
;
}
return
init_promise
.
promise
;
};
// API methods only available to plugins
...
...
src/i18n.js
0 → 100644
View file @
6c2f7c87
// Converse.js (A browser based XMPP chat client)
// http://conversejs.org
//
// This is the internationalization module.
//
// Copyright (c) 2012-2017, Jan-Carel Brand <jc@opkode.com>
// Licensed under the Mozilla Public License (MPLv2)
//
/*global define */
(
function
(
root
,
factory
)
{
define
([
"
es6-promise
"
,
"
jed
"
,
"
lodash.noconflict
"
,
"
moment_with_locales
"
],
factory
);
}(
this
,
function
(
Promise
,
Jed
,
_
,
moment
)
{
'
use strict
'
;
function
detectLocale
(
library_check
)
{
/* Determine which locale is supported by the user's system as well
* as by the relevant library (e.g. converse.js or moment.js).
*
* Parameters:
* (Function) library_check - Returns a boolean indicating whether
* the locale is supported.
*/
var
locale
,
i
;
if
(
window
.
navigator
.
userLanguage
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
userLanguage
,
library_check
);
}
if
(
window
.
navigator
.
languages
&&
!
locale
)
{
for
(
i
=
0
;
i
<
window
.
navigator
.
languages
.
length
&&
!
locale
;
i
++
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
languages
[
i
],
library_check
);
}
}
if
(
window
.
navigator
.
browserLanguage
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
browserLanguage
,
library_check
);
}
if
(
window
.
navigator
.
language
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
language
,
library_check
);
}
if
(
window
.
navigator
.
systemLanguage
&&
!
locale
)
{
locale
=
isLocaleAvailable
(
window
.
navigator
.
systemLanguage
,
library_check
);
}
return
locale
||
'
en
'
;
}
function
isMomentLocale
(
locale
)
{
return
_
.
isString
(
locale
)
&&
moment
.
locale
()
===
moment
.
locale
(
locale
);
}
function
isConverseLocale
(
locale
,
supported_locales
)
{
return
_
.
isString
(
locale
)
&&
_
.
includes
(
supported_locales
,
locale
);
}
function
getLocale
(
preferred_locale
,
isSupportedByLibrary
)
{
if
(
_
.
isString
(
preferred_locale
))
{
if
(
preferred_locale
===
'
en
'
||
isSupportedByLibrary
(
preferred_locale
))
{
return
preferred_locale
;
}
}
return
detectLocale
(
isSupportedByLibrary
)
||
'
en
'
;
}
function
isLocaleAvailable
(
locale
,
available
)
{
/* Check whether the locale or sub locale (e.g. en-US, en) is supported.
*
* Parameters:
* (String) locale - The locale to check for
* (Function) available - returns a boolean indicating whether the locale is supported
*/
if
(
available
(
locale
))
{
return
locale
;
}
else
{
var
sublocale
=
locale
.
split
(
"
-
"
)[
0
];
if
(
sublocale
!==
locale
&&
available
(
sublocale
))
{
return
sublocale
;
}
}
}
let
jed_instance
;
return
{
setLocales
(
preferred_locale
,
_converse
)
{
_converse
.
locale
=
getLocale
(
preferred_locale
,
_
.
partial
(
isConverseLocale
,
_
,
_converse
.
locales
)
);
moment
.
locale
(
getLocale
(
preferred_locale
,
isMomentLocale
));
},
translate
(
str
)
{
if
(
_
.
isNil
(
jed_instance
))
{
return
Jed
.
sprintf
.
apply
(
Jed
,
arguments
);
}
var
t
=
jed_instance
.
translate
(
str
);
if
(
arguments
.
length
>
1
)
{
return
t
.
fetch
.
apply
(
t
,
[].
slice
.
call
(
arguments
,
1
));
}
else
{
return
t
.
fetch
();
}
},
fetchTranslations
(
locale
,
supported_locales
,
locale_url
)
{
/* Fetch the translations for the given local at the given URL.
*
* Parameters:
* (String) locale: The given i18n locale
* (Array) supported_locales: List of locales supported
* (String) locale_url: The URL from which the translations
* should be fetched.
*/
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
isConverseLocale
(
locale
,
supported_locales
)
||
locale
===
'
en
'
)
{
return
resolve
();
}
const
xhr
=
new
XMLHttpRequest
();
xhr
.
open
(
'
GET
'
,
locale_url
,
true
);
xhr
.
setRequestHeader
(
'
Accept
'
,
"
application/json, text/javascript
"
);
xhr
.
onload
=
function
()
{
if
(
xhr
.
status
>=
200
&&
xhr
.
status
<
400
)
{
jed_instance
=
new
Jed
(
window
.
JSON
.
parse
(
xhr
.
responseText
));
resolve
();
}
else
{
xhr
.
onerror
();
}
};
xhr
.
onerror
=
function
()
{
reject
(
xhr
.
statusText
);
};
xhr
.
send
();
});
}
};
}));
src/utils.js
View file @
6c2f7c87
...
...
@@ -13,7 +13,6 @@
"
es6-promise
"
,
"
jquery.browser
"
,
"
lodash.noconflict
"
,
"
moment_with_locales
"
,
"
strophe
"
,
],
factory
);
}(
this
,
function
(
...
...
@@ -21,7 +20,6 @@
Promise
,
jQBrowser
,
_
,
moment
,
Strophe
)
{
"
use strict
"
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment