-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathstati18n.js
164 lines (139 loc) · 4.66 KB
/
stati18n.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*!
* Stati18n v0.2
* stati18n.js
* Created by Florian Rotagnon
* Licensed under MIT
*/
function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
else {
expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
}
function getCookie(name) {
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(name + "=");
if (c_start != -1) {
c_start = c_start + name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return undefined;
}
// find on http://stackoverflow.com/questions/19999388/jquery-check-if-user-is-using-ie
function isIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
return true;
else // If another browser, return 0
return false;
}
$( document ).ready(function() {
var languageList = new Array();
var defaultUserLanguage = 'en';
$('link[rel="stylesheet"]').each(function(){
var fileName = $(this).attr('href');
if( fileName != "stati18n.css" && fileName.indexOf("stati18n") > -1 )
defaultUserLanguage = fileName.slice(9, -4);
});
var userLanguage = defaultUserLanguage;
$('.stati18n-language-selector').each(function() {
languageList.push(this.getAttribute('value'));
});
//get info about css files
$('body').append('<div id="stati18n-infos" style="display:none;"></div>');
var infos;
if(isIE()){
var cssElem = window.getComputedStyle(document.getElementById("stati18n-infos"));
infos = cssElem['customContent'];
}
else{
infos = $("#stati18n-infos").css("content");
}
infos = infos.slice(1, infos.length-1);
var infosTab = infos.split(" ");
var host = infosTab[0];
var languages = infosTab.slice(1, infosTab.length);
$('#stati18n-infos').remove();
//get static content
$('body').append('<div id="stati18n-fixed-values" style="display:none;"></div>');
if(isIE()){
var cssElem = window.getComputedStyle(document.getElementById("stati18n-fixed-values"));
infos = cssElem['customContent'];
}
else {
infos = $("#stati18n-fixed-values").css("content");
}
infos = infos.slice(1, infos.length-1);
var fixedTab = infos.split(";;");
$('#stati18n-fixed-values').remove();
var i = languageList.indexOf(userLanguage);
if( i > -1 )
{
userLanguage = languageList[i]
}
else
{
userLanguage = languageList[0];
}
var newUserLanguage = getCookie("lang");
if(newUserLanguage == undefined)
{
newUserLanguage = navigator.language || navigator.userLanguage;
}
changeLanguage(newUserLanguage)
updateStatic();
/****** FUNCTION ******/
//Add static content
function updateStatic()
{
for(var ind in fixedTab)
{
var line = fixedTab[ind];
var lineSplit = line.split("§§");
var currentLanguage = lineSplit[0];
if(currentLanguage == userLanguage)
{
var id = lineSplit[1];
var content = lineSplit[2];
if(typeof($(".s18n-"+id).attr("value")) != 'undefined')
$(".s18n-"+id).attr("value", content);
else
$(".s18n-"+id).html(content);
}
}
}
//Modify language
function changeLanguage(newLanguage)
{
// If the language is one that is already displayed
if(userLanguage == newLanguage)
return;
var precUserLanguage = userLanguage
userLanguage = newLanguage;
var precFile = host+'stati18n-'+precUserLanguage+'.css';
var file = host+'stati18n-'+userLanguage+'.css';
if (!$("link[href='"+file+"']").length && $.inArray(userLanguage, languages)>=0)
{
$("link[href='"+precFile+"']").remove();
$('head').append('<link rel="stylesheet" href="'+file+'" type="text/css" />');
}
updateStatic();
createCookie("lang", userLanguage, 7);
}
/****** EVENTS ******/
$('.stati18n-language-selector').click(function (e) {
changeLanguage(this.getAttribute('value'));
});
});