Quelqu'un peut-il expliquer le xliff:g
pour les chaînes/localisation.
Je comprends que xliff:g
n'est pas censé traduire quoi que ce soit à l'intérieur du <>
choses, mais je ne sais pas exactement comment j'utiliserais cela dans le code.
Un exemple que j'ai dans mon cas est la pratique des traductions espagnoles que j'ai:
<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d/xliff:g</string>
J'essaie maintenant d'obtenir des chaînes localisées avec xliff:g
travailler. Qu'est-ce que id
ici et que fait-il? Et comment ça s'appelle?
Quel est également le %d
et que fait-il? Quel est l'intérêt de example
? De plus, comment pourrais-je appeler cela dans le code, le cas échéant?
Pourquoi quelqu'un ne peut-il pas simplement faire le code suivant pour insérer le xml suivant:
<string name="quant">Quantity: </string>
dans Java comme ceci:
getString(R.string.quant) + quantity
de cette façon, il concactène la variable de quantité dans le getString
?
Faute de frappe mineure dans votre exemple, il devrait y avoir une balise de fermeture:
<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d</xliff:g></string>
L'attribut id
est juste utilisé pour identifier ce que représente le paramètre de substitution (dans votre cas, il représente la quantité). C'est comme vous l'avez dit, une note, et non réellement utilisée par programme.
Cela dit, dans Android Studio, si le pliage de code est activé pour les chaînes, il remplacera l'ID lorsqu'il affichera la chaîne réduite. Vous verrez quelque chose comme ceci:
// This...
mTextView.setText(getString(R.string.order_quantity, 2));
// Will show as this when folded:
mTextView.setText("Cantidad: {quantity}");
Quant à votre deuxième question, pourquoi ne pas simplement utiliser la concaténation de chaînes? Dans d'autres langues, la substitution peut ne pas aller à la fin de la chaîne. Vous pourriez avoir quelque chose comme:
values/strings.xml
<string name="order_quantity">%d items</string>
values-es/strings.xml
<string name="order_quantity">Cantidad: %d</string>
Vous pouvez donc voir que dans ce cas, le simple fait d'ajouter les chaînes ensemble ne vous donnera pas un résultat valide.
% d est utilisé pour représenter une partie de la mémoire sous forme d'entier. Il est le plus souvent utilisé pour imprimer un certain nombre sur la sortie standard, comme suit:
#include <stdio.h>
int main()
{
int n = 42;
printf("The answer to life, universe and everything is %d", n);
return 0;
}
Contrairement à Java, où vous concaténez simplement des nombres et des chaînes, etc., C utilise ce% quelque chose pour indiquer ce qui est écrit. % d indique que, par exemple dans printf (), après la virgule, il y aura un argument (dans notre cas, c'est n), qui devrait être représenté comme un int.
Reportez-vous à la liste de tous les spécificateurs de format dans la programmation C pour une liste complète des spécificateurs de format
Voir également Official Android Developers Documentation