2017-10-06 4 views
0

Je ne suis pas sûr de savoir comment nommer ce problème. Mon application utilise .regx pour la localisation, et certaines des chaînes ont des balises {0-9} et sont introduites dans string.Format. Cela a bien fonctionné jusqu'à ce que je reçoive la première traduction de RTL. string.Format s'est écrasé, se plaignant que le format de la chaîne était incorrect. Voici un exemple d'une chaîne se briser:Comment faire pour réparer string.Format {0} étant partiellement RTL et LTR

« {اعاده تسميه » {0

Il semble correct, mais le {0} est en fait divisé en deux - c'est un mélange de texte RTL et LRT. Vous pouvez voir le problème en sélectionnant et en faisant glisser votre souris sur la chaîne. J'essaie de les corriger en masse (faire du RTL à valeur entière), mais il s'est avéré étonnamment difficile à faire (et extrêmement frustrant). Y a-t-il un bon moyen de résoudre ce problème?

+0

Le problème est que les octets dans la chaîne ressemblent à la chaîne commence par '" {'et se termine par' "{0'. Je ne parle pas couramment Unicode, mais [Analyser le texte arabe/RTL de gauche à droite] (https://stackoverflow.com/q/12630566/580951) suggère d'utiliser une marque de gauche à droite (U + 200E) séparer l'arabe. – Romoku

Répondre

0

string.Format() n'a pas d'importance pour la chaîne source ou les paramètres. Par exemple, considérons ce qui suit:

string.Format("لغه العربیه {0} زبان فارسی {1} کشور افغانستان {2}", p1, p2, p3);

Toute chaîne peut mettre en p1, p2, p3, tout droit à gauche ou de gauche à droite chaîne. La manière opoosite fonctionne aussi. Je veux dire que la chaîne principale est une chaîne de gauche à droite et que les paramètres sont de gauche à droite ou de droite à gauche.

Un point important ici est que la direction du texte est une question d'interface utilisateur non chaîne elle-même. Un composant de l'interface utilisateur peut vouloir afficher une chaîne de droite à gauche ou de gauche à droite.

+0

Votre exemple fonctionne parce que la commande est toujours correcte - le crochet d'ouverture est toujours à côté du reste de la balise. string.Format ("{معالجه {0", p1) throws 'System.FormatException' dans mscorlib.dll Informations supplémentaires: Chaîne d'entrée n'était pas dans un format correct. – Klocman

+0

Vous pouvez utiliser 'string.Format (" معالجه {0} ", p1)' il ne devrait pas lancer d'exception. Dans ce cas, littéral '" معالجه "' vient avant le paramètre '{0}' –