Reset i18next on user action - javascript

I want to reset i18next translations on my web app. I am currently trying this:
// After user action:
i18n.init({
lng: language
});
$('body').i18n();
But its not working as i expected. Translations who are inyected using [prepend] or [append] are being duplicated.
<a class="landing-secondary-section-endlink" data-i18n="[prepend]landing-secondary-section-teach" href="http://..." target="_blank">Descubre una nueva forma de enseñar.Irakasteko era berri bat aurkitu.Scopri una nuova forma di insegnare.Descubre una nueva forma de enseñar.Discover a new way of teaching.Descubre una nueva forma de enseñar.Irakasteko era berri bat aurkitu.Descubre una nueva forma de enseñar.<span class="landing__link-underline"></span></a>

I solved this by removing all translations first.

Related

Map items from a JSON file [closed]

Closed. This question is not written in English. It is not currently accepting answers.
Stack Overflow is an English-only site. The author must be able to communicate in English to understand and engage with any comments and/or answers their question receives. Don't translate this post for the author; machine translations can be inaccurate, and even human translations can alter the intended meaning of the post.
Closed 3 days ago.
Improve this question
Estoy desarrollando mi portfolio y en la parte de los proyectos estoy intentando leer todos los datos de cada proyecto desde un archivo JSON. El codigo del archivo es el siguiente:
{ "name": "Shirts Division", "image": "img/projects/shirts_division.webp", "tecnologies": [ {"img_tec": "img/coloured_tecnologies/html-5.webp"}, {"img_tec": "img/coloured_tecnologies/css-3.webp"}, {"img_tec": "img/coloured_tecnologies/javascript.webp"}, {"img_tec": "img/coloured_tecnologies/php.webp"}, {"img_tec": "img/coloured_tecnologies/postgreSQL.webp"} ], "description": "Tienda de camisetas de futbol creada como proyecto de prueba. En este se utilizan las tecnologías de desarrollo web básicas como HTML, CSS, Javascript y Php. También se utilizan sesiones (HTTP), fetch de datos y una base de datos Postgre." }
El problema lo encuentro en el momento de recorrer los valores de "tecnologies" ya que hago un map para los proyectos y por lo tanto no lo puedo realizar de las tecnologias.
Añado foto del código por si alguien me puede ayudar. Gracias
Estoy intentando realizar un map para los proyectos y otro para las tecnologías de cada proyecto.

How to save whether a user clicked a button or not, and if so run a function

I have two functions translate_fr and translate_en, onClick when you click FR or EN the paragraphs are swapped either to english or french by grabbing their id's with inner.html
These two functions run on every html page, but obviously when refreshed or changing pages the onclick function reverts back to normal. So for instance if the user presses the FR button I want all the translate_fr functions on the other pages to run once the page loads, swapping the english paragraphs to french.
I need a way to store the users button click with local storage, and then a conditional statement saying if the user pressed EN run function translate_en else if FR then run function translate_fr.
Is this possible? I am VERY new to JavaScript and unfamiliar with local storage. I have no way how to do this. Here is the website on its domain lionkuts.ca for any other reference. I put two paragraphs as an example, though as you can see in the image I did this for every paragraph in the website.
function translate_en(){
document.getElementById("intro").innerHTML = `Here at Lion Kuts we are a cat only establishment that offers a full range of services from complete grooming, bathing to boarding. You and your pet will be thrilled to know that only professional, natural and biodegradeable products are used, any sensitivities or allergies will not be a problem.`;
}
function translate_fr(){
document.getElementById("intro").innerHTML = `Chez Coupe Lion, nous ne sommes qu'un chat établissement offrant une gamme complète de services du toilettage complet, de la baignade à l'embarquement.Vous et votre animal sera ravi de savoir que seul un professionnel, des produits naturels et biodégradables sont utilisés, tout les sensibilités ou les allergies ne seront pas un problème.`;
}
<div class="wrapper3">
<button class="translate" id="click1" type="button"onclick="translate_en()">EN
</button>
<button class="translate" id="click2"
type="button" onclick="translate_fr()">FR
</button>
</div>
<p id="intro">
Here at Lion Kuts we are a cat only
establishment that offers a full range of services
from complete grooming, bathing to boarding. You and
your pet will be thrilled to know that only professional,
natural and biodegradeable products are used, any
sensitivities or allergies will not be a problem.
</p>
You can use Window.localStorage to save the current language, and then use Window.onload to check the language.
Window.localStorage
Window.onload
function translate_en(){
Window.localStorage.setItem("language", "EN");
//translate the web page
} //translate_fr is same, but with french
Window.onload = (e) => {
let language = Window.localStorage.getItem("language");
if(language === "EN"){
translate_en();
} else if(language === "FR"){
translate_fr();
} else {
translate_en();//Default (if null)
}
}

How to compare a text with accents in cypress?

I try to compare a text in cypress, my text has words with accents and it throws the following error ...
AssertionError Timed out retrying: expected '' to have text '\n Su lote de distribuci�n se ha creado correctamente, en breve sus comprobantes se enviar�n a sus respectivos destinatarios.\n', but the text was '\n Su lote de distribución se ha creado correctamente, en breve sus comprobantes se enviarán a sus respectivos destinatarios.\n
I could make it work by replacing the accented words with their corresponding unicode symbol, which for ñ was \u00F3n

Translating a Paragraph does not work using translate.js

I'm using translate.js.
Short text sentences work but I'm finding that long paragraphs do not nor do elements embedded within elements as you'll see below.
Here's ALL THE CODE:
STEP 1:
the HTML:
<div class="company mar-left10">
<h4 class="trn">Sustainable Global Solutions' Mission</h4>
<p class="trn">Sustainable Global Solutions mission is to market, build, implement, and operate sustainable business methods throughout the US and worldwide. The end result of our efforts is to provide proven, proprietary, and economically efficient solutions to our food, fuel, and population crises at hand. Additionally our waste-to-energy systems can utilize solid waste gasification for renewable energy generation.</p>
</div>
STEP 2:
The JAVASCRIPT:
$(function () {
var t = {
//TITLE
"Sustainable Global Solutions' Mission": {
en: "Sustainable Global Solutions' Mission",
sp: "Misión de Sustainable Global Solutions"
},
//**THIS SECTION WILL NOT TRANSLATE!**
"Sustainable Global Solutions mission is to market, build, implement, and operate sustainable business methods throughout the US and worldwide. The end result of our efforts is to provide proven, proprietary, and economically efficient solutions to our food, fuel, and population crises at hand.Additionally our waste-to-energy systems can utilize solid waste gasification for renewable energy generation.": {
en: "Sustainable Global Solutions mission is to market, build, implement, and operate sustainable business methods throughout the US and worldwide. The end result of our efforts is to provide proven, proprietary, and economically efficient solutions to our food, fuel, and population crises at hand.Additionally our waste-to-energy systems can utilize solid waste gasification for renewable energy generation.",
sp: "La misión de Sustainable Global Solutions es comercializar, construir, implementar y operar métodos comerciales sostenibles en todo Estados Unidos y en todo el mundo. El resultado final de nuestros esfuerzos es proporcionar soluciones probadas, exclusivas y económicas soluciones eficientes para nuestras crisis de alimentación, combustible y población a la mano.Además, nuestros sistemas de conversión de residuos en energía pueden utilizar la gasificación de residuos sólidos para la generación de energía renovable."
},
};
var _t = $('body').translate({lang: "en", t: t});
var str = _t.g("translate");
console.log(str);
$(".lang_selector").click(function (ev) {
var lang = $(this).attr("data-value");
_t.lang(lang);
console.log(lang);
ev.preventDefault();
});
}
);
Any help would be greatly appreciated.
Thank you everyone
Figured it out.
SIMPLE as MAKING SURE EACH PLACE the text appears it is IDENTICAL.
Sustainable Global Solutions mission is to market, build, implement, and operate sustainable business methods throughout the US and worldwide. The end result of our efforts is to provide proven, proprietary, and economically efficient solutions to our food, fuel, and population crises at hand.Additionally our waste-to-energy systems can utilize solid waste gasification for renewable energy generation.
I made sure that it was so and WALA!
La misión de Sustainable Global Solutions es comercializar, construir, implementar y operar métodos comerciales sostenibles en todo Estados Unidos y en todo el mundo. El resultado final de nuestros esfuerzos es proporcionar soluciones probadas, exclusivas y económicas soluciones eficientes para nuestras crisis de alimentación, combustible y población a la mano.Además, nuestros sistemas de conversión de residuos en energía pueden utilizar la gasificación de residuos sólidos para la generación de energía renovable.
Thank you to I Wrestled a BEAR ONCE for helping me SEE THE LIGHT!

Read JSon string with Javascript and PHP

In a Javascript file i receive this JSon string into a hidden html string:
<input id="page_json_language_index" type="hidden" value="[{"id":"label_accept_terms","fr":"En cliquant sur le bouton ci-dessous, vous accepter de respecter les "},{"id":"label_and","fr":" et la "},{"id":"label_birthdate","fr":"Anniversaire"},{"id":"label_bottom_about","fr":"\u00c0 propos de GayUrban"},{"id":"label_bottom_contact","fr":"Contactez-nous"},{"id":"label_bottom_copyright","fr":"\u00a9 2010-2013 GayUrban.Com - Tous droits r\u00e9serv\u00e9s"},{"id":"label_bottom_privacypolicy","fr":"Vie priv\u00e9e"},{"id":"label_bottom_termsofuse","fr":"Conditions d`...mon courriel"},{"id":"label_signon_twitter","fr":"Avec Twitter"},{"id":"label_slogan","fr":"LE site des rencontres LGBT !"},{"id":"label_terms_of_use","fr":"Conditions d`utilisation"},{"id":"label_title","fr":"Bienvenue sur GayUrban | LE site des rencontres LGBT !"},{"id":"label_transgender","fr":"Transgendre"},{"id":"label_username","fr":"Nom d`utilisateur"},{"id":"label_wait_create_profile","fr":"Un moment SVP, Cr\u00e9ation de votre profil en cours..."},{"id":"label_your_gender","fr":"Votre \u00eate"}]">
from MySQL database in user language (this example is in French (fr) so, i need to access in Javascript to each "id" and each value of this 'id"
Example : for the first "id"
i need to obtain on separate variables for each ID and VALUE
var label = "label_accept_terms";
and other variable
var value = "En cliquant sur le bouton ci-dessous, vous accepter de respecter les "
so i have a problem to read and affected each ID with good label and value.
Thank you for your helping !
I must point out that you've made a mistake in your HTML. You should escape the quotes to avoid breaking attributes, for example, simply replace them with apostrophe:
<input id="page_json_language_index" type="hidden" value='[{"id":"label_accept_terms","fr":"En cliquant sur le bouton ci-dessous, vous accepter de respecter les "},{"id":"label_and","fr":" et la "},{"id":"label_birthdate","fr":"Anniversaire"},{"id":"label_bottom_about","fr":"\u00c0 propos de GayUrban"},{"id":"label_bottom_contact","fr":"Contactez-nous"},{"id":"label_bottom_copyright","fr":"\u00a9 2010-2013 GayUrban.Com - Tous droits r\u00e9serv\u00e9s"},{"id":"label_bottom_privacypolicy","fr":"Vie priv\u00e9e"},{"id":"label_bottom_termsofuse","fr":"Conditions d`...mon courriel"},{"id":"label_signon_twitter","fr":"Avec Twitter"},{"id":"label_slogan","fr":"LE site des rencontres LGBT !"},{"id":"label_terms_of_use","fr":"Conditions d`utilisation"},{"id":"label_title","fr":"Bienvenue sur GayUrban | LE site des rencontres LGBT !"},{"id":"label_transgender","fr":"Transgendre"},{"id":"label_username","fr":"Nom d`utilisateur"},{"id":"label_wait_create_profile","fr":"Un moment SVP, Cr\u00e9ation de votre profil en cours..."},{"id":"label_your_gender","fr":"Votre \u00eate"}]'>
JSON.parse is the best way to convert JSON string, but it's not surpported by old IE (e.g. IE6). You can use JSON2 to make it compatible, or just simply use eval().
Aware that abuse of eval() may lead to XSS (Cross Site Scripting) vulnerability. Make sure that the JSON you're about to parse is safe (doesn't include malicious Javascript).
Here's an example to read all id:
<input id="page_json_language_index" type="hidden" value='[{"id":"label_accept_terms","fr":"En cliquant sur le bouton ci-dessous, vous accepter de respecter les "},{"id":"label_and","fr":" et la "},{"id":"label_birthdate","fr":"Anniversaire"},{"id":"label_bottom_about","fr":"\u00c0 propos de GayUrban"},{"id":"label_bottom_contact","fr":"Contactez-nous"},{"id":"label_bottom_copyright","fr":"\u00a9 2010-2013 GayUrban.Com - Tous droits r\u00e9serv\u00e9s"},{"id":"label_bottom_privacypolicy","fr":"Vie priv\u00e9e"},{"id":"label_bottom_termsofuse","fr":"Conditions d`...mon courriel"},{"id":"label_signon_twitter","fr":"Avec Twitter"},{"id":"label_slogan","fr":"LE site des rencontres LGBT !"},{"id":"label_terms_of_use","fr":"Conditions d`utilisation"},{"id":"label_title","fr":"Bienvenue sur GayUrban | LE site des rencontres LGBT !"},{"id":"label_transgender","fr":"Transgendre"},{"id":"label_username","fr":"Nom d`utilisateur"},{"id":"label_wait_create_profile","fr":"Un moment SVP, Cr\u00e9ation de votre profil en cours..."},{"id":"label_your_gender","fr":"Votre \u00eate"}]'>
<textarea id="debug-console" cols="50" rows="20"></textarea>
<script type="text/javascript">
var arr = eval(document.getElementById("page_json_language_index").value),
output = document.getElementById("debug-console");
//output all id
for(var i=0; i<arr.length; i++)
output.value += [i, ": ", arr[i].id, "\n"].join("");
//show the first id
alert(arr[0].id);
</script>
Actually you can directly output JSON to Javascript.
To meet your needs, I think here's what you need.
<?php
...
$data = ...; //for example, from mysql query results
$language = "fr"; //you can replace it with it/en/zh...
...
?>
<input id="some_id"></input>
<script>
(function() {
var i18n = "<?php echo json_encode($data); ?>",
lang = "<?php echo $language; ?>", //language
data = eval(i18n); //you can also use JSON.parse/jQuery.parseJSON ...
for(var i=0; i<data.length; i++) {
document.getElementById(data[i].id).value = data[i][lang]; //a general way to read object's attribute in Javascript
}
})()
</script>
i need to obtain on separate variables for each ID and VALUE
This is not the way to go, you don't want to pollute your scope with a bunch of variables. What you have is a collection (array of objects). You can loop such collection and access the properties you need.
var input = document.getElementById('page_json_language_index');
var data = JSON.parse(input.value); // collection
the goal is to assign to each pair of (id, fr) value into a jquery
label
var label = function(lab) {
return '<label id="'+ lab.id +'">'+ lab.fr +'</label>';
};
var labels = data.map(label);
You can also make it a jQuery collection:
var $labels = $(labels.join(''));
Then you can append it to any container:
$labels.appendTo('body');

Categories