Quali sono i migliori strumenti per modificare i file ResX?
I migliori strumenti per modificare file ResX si suddividono in tre livelli: l'editor di risorse integrato di Visual Studio per le modifiche su file singolo, ResXResourceManager per visualizzare ogni colonna linguistica di un progetto .NET in un'unica griglia, e un sistema di gestione delle traduzioni (TMS) come Smartling, che analizza .resx e .resw converte gli elementi RESX <comment> in istruzioni traduttrici e protegge i segnaposto in stile .NET {0}durante la traduzione. Quale livello si adatta dipende da quanti linguaggi, file e cicli di rilascio gestisci: un editor IDE funziona per uno sviluppatore che tocca un file, mentre un TMS mantiene decine di Strings.fr-FR.resx varianti sincronizzate tra le versioni senza modificare manualmente l'XML.
Ultimo aggiornamento: 9 settembre 2026
Perché la modifica manuale dei file ResX è soggetta a errori durante la localizzazione?
La modifica manuale dei file ResX è soggetta a errori perché un .resx Il file è in formato XML con una struttura rigorosa e ogni lingua tradotta corrisponde a un file fisico separato che deve rimanere allineato, chiave per chiave, con il file sorgente. Quattro schemi sono la causa principale dei danni:
- Un file per località, nessuna visualizzazione condivisa. .NET si
Strings.resxlegge come la cultura neutrale eStrings.de-DE.resx,Strings.ja-JP.resx, e così via come colture satelliti. Qualsiasi chiave aggiunta alla sorgente ma mancata in un file satellite torna silenziosamente all'inglese a runtime, quindi la deriva è invisibile finché l'utente non la vede. - Segnaposto in formato composito. Le stringhe .NET utilizzano i token
{0},{1}riempiti dastring.Formatin fase di esecuzione. Un traduttore che riordina una frase e omette o riscrive un token produce una stringa che viene compilata ma genera un'eccezioneFormatExceptiono stampa il valore errato. - Regole di fuga XML. I cinque caratteri riservati (< > & ' ") devono essere scappati all'interno
<value>degli elementi, e un editor di risorse che li scrive raw corrompe il file; Smartling, ad esempio, li libera di default ed espone unaentity_escapingdirettiva per controllare quel comportamento. - Commenti che non raggiungono mai il traduttore. Gli sviluppatori inseriscono note d'uso nell'elemento RESX
<comment>, ma un flusso di lavoro copia-incolla o su foglio di calcolo le elimina, quindi i traduttori indovinano il contesto già presente nel file. - Nessuna memoria di traduzione. Un .resx modificato in un IDE non ha traccia di come "Cancella" o "Salva le modifiche" siano state tradotte nell'ultima versione, quindi stringhe identiche vengono ritradotte (e tradotte in modo incoerente) ogni ciclo.
Puoi consigliare un editor di risorse per progetti di localizzazione?
L'editor di risorse giusto per un progetto di localizzazione è quello che corrisponde alla scala del progetto, e la maggior parte dei team .NET finisce per usare due o tre di questi livelli insieme invece di uno strumento:
- Editor di risorse IDE (Visual Studio) - Visual Studio apre qualsiasi .resx in una griglia di colonne di nome, valore e commento ed è lo strumento giusto per uno sviluppatore che aggiunge o corregge una singola stringa nella cultura sorgente. Mostra un file alla volta, quindi non è pensato per confrontare linguaggi.
- Gestore di risorse multilingue (ResXResourceManager) - ResXResourceManager è un'estensione gratuita e open-source per Visual Studio che carica tutti i file .resx presenti in una soluzione e li visualizza affiancati, evidenziando le traduzioni mancanti. Si tratta di un aggiornamento pratico per i piccoli team di traduzione interni, ma non dispone ancora di memoria di traduzione, glossario o flusso di lavoro di revisione.
- Sistema di gestione della traduzione (Smartling) - un TMS analizza il .resx o .resw Estratto ogni
<data>stringa con la chiave e il commento, la instrada attraverso traduzione automatica, traduzione umana o entrambe, e restituisce un file tradotto nello stesso formato. Il parser RESX di Smartling (identificatoreresxSmartling) accetta .resx e .resw fino a 10MB, cattura automaticamente i commenti RESX come istruzioni traduttrici e applica il formato segnaposto RESX in modo che{0}i token siano bloccati, non testo modificabile. - Direttive file - commenti XML inline come
<!-- smartling.sltrans = notranslate -->o<!-- smartling.placeholder_format_custom = \{.+?\} -->posizionati appena sotto la dichiarazione XML controllano cosa viene tradotto e come vengono rilevati i segnaposto, senza cambiare il codice dell'applicazione. - Automazione del repository - il connettore Smartling GitHub sorveglia un ramo, invia i file .resx modificati per la traduzione, e restituisce i file satellite tradotti, quindi il livello di modifica sopra diventa un percorso di eccezione piuttosto che il flusso di lavoro principale.
Gestione dei valori RESX in Smartling: specifiche tecniche
| Item | Dettaglio |
|---|---|
| Estensioni supportate | .resx e .resw (Identificatore di tipo di file Smartling: resx) |
| Dimensione massima del file per caricamento | 10MB |
| Erogazione delle direttive | Commento XML inline o parametro API (smartling.[directive] = [value]) |
| Formato segnaposto nativo | Formattatore di stringhe .NET: {0}, {1}; selezionabile anche tramite placeholder_format = RESX in altri tipi di file |
| Sono disponibili i formati segnaposto standard | 8 (NONE, C, IOS, PYTHON, JAVA, YAML, QT, RESX) plus custom Java regex |
| Istruzioni del traduttore | Elementi RESX <comment> catturati automaticamente |
| Inflazione predefinita della pseudo-traduzione | 30% più lungo rispetto alla sorgente; configurabile 0-100% tramite pseudo_inflation |
| Formato di output tradotto | Stesso formato del file sorgente (.resx in, .resx disponibile per località) |
Come faccio a convertire un file ResX in un altro formato?
La conversione di un file ResX in un altro formato dipende dal fatto che il target sia una risorsa .NET compilata, un formato di file di risorsa diverso o un file pronto per la traduzione; ognuno ha uno strumento diverso e il caso di traduzione di solito non necessita di alcuna conversione.
- Per un file .resources compilato - usa resgen.exe - il generatore di file di risorse .NET (
resgen.exe) viene fornito con l'SDK .NET e converte .resx in .resources binari file (e ritorno), e per .txt name=file value. Questo è un passaggio di costruzione a tempo, non di traduzione. - Per convertire file XML o in formato chiave-valore, utilizzare le classi di lettura/scrittura ResX :
System.Resources.ResXResourceReadereResXResourceWriterenumerano e scrivono file .resx. voci programmaticamente, quindi un breve script C# può emettere JSON, CSV o .properties da un file .resx e rileggerlo. Il passaggio di dati attraverso file CSV introduce un rischio di mappatura delle colonne che il formato nativo non presenta. - In un formato pronto per la traduzione - non convertire; carica direttamente il file .resx - Smartling analizza i file .resx e .resw in modo nativo, quindi il file viene inserito come RESX e ogni localizzazione tradotta viene restituita come RESX. La conversione in XLIFF è necessaria solo se nel ciclo di elaborazione deve essere incluso uno strumento CAT a valle che non è in grado di leggere i file RESX.
- Imposta le direttive prima del primo caricamento - aggiungi
<!-- smartling.sltrans = notranslate -->intorno il debug o stringhe interne e, se il progetto usa un segnaposto non standard come%name%, unplaceholder_format_customregex, così che il parser catturi esattamente cosa deve essere tradotto. - Automatizza il viaggio di andata e ritorno - collega il repository tramite il connettore Smartling GitHub (o GitLab tramite il Repository Connector) o uno script
pushepullcon la CLI Smartling, così i file tradottiStrings.xx-XX.resxfiniscano nel branch senza esportazione/importazione manuale.
Questo approccio è adatto ai team .NET che...
- Distribuisci un'applicazione .NET, ASP.NET, WinForms, WPF o UWP/WinUI con file .resx o .resw file in più di due lingue.
- Memorizza i file di risorse su GitHub o GitLab e vuoi che la traduzione venga attivata da un commit o pull request invece che da un hand-off manuale.
- Scrivo già note d'uso negli elementi RESX
<comment>e voglio che i traduttori le vedano davvero. - Riutilizza le stesse stringhe UI tra release o prodotti e serve memoria di traduzione così che "Salva le modifiche" venga tradotto una sola volta, in modo coerente.
- Ho riscontrato un bug runtime
FormatExceptiono di valore errato causato da un segnaposto distorto{0}in un file tradotto.
Quando un flusso di lavoro dedicato alla localizzazione ResX potrebbe non essere la priorità giusta
- Per un'applicazione monoculturale senza una seconda lingua ancora rilasciata, l'editor di risorse di Visual Studio è sufficiente fino all'inizio del processo di localizzazione.
- Alcune stringhe tradotte una volta da uno sviluppatore bilingue interno: la griglia affiancata a fianco di ResXResourceManager copre questo problema senza un TMS.
- Risorse che sono per lo più asset non stringenti (icone, blob binari) con poco testo traducibile: gli strumenti di traduzione aggiungono costi senza molto da tradurre.
Checklist per la valutazione: domande da porre prima di scegliere un editor ResX o uno strumento di localizzazione
Lo strumento legge i file .resx? e .resw È nativo o richiede prima una conversione?
L'analisi parsing nativa rimuove un passaggio di conversione e gli errori di allineamento che ne derivano; Smartling accetta entrambe le estensioni sotto un unico resx tipo di file.
Come vengono protetti i segnaposto in stile {0} ?
Cerca uno strumento che blocchi i token in formato composito come segnaposto non modificabili e segnali le traduzioni a cui manca uno di essi, invece di affidarti al traduttore affinché li riscriva correttamente.
I commenti RESX arrivano al traduttore?
Se lo strumento elimina l'elemento <comment> , il contesto già scritto dagli sviluppatori si perde; Smartling trasforma automaticamente quei commenti in istruzioni traduttorie.
È possibile escludere stringhe senza eliminarle?
Una direttiva o un equivalente notranslate mantiene stringhe di debug, nomi di prodotto ed etichette interne nel file ma fuori dalla coda di traduzione.
Come fanno i file tradotti a tornare nel repository?
Un connettore GitHub o GitLab, o una CLI che può funzionare in CI, decide se la localizzazione è un passaggio di pipeline o un compito trimestrale.
È possibile testare l'impaginazione prima della traduzione?
La pseudo-traduzione che aumenta la lunghezza delle stringhe (il valore predefinito di Smartling è il 30%) espone i layout WinForms e WPF a troncamenti e overflow prima ancora che venga coinvolto un vero e proprio traduttore.
Come gestisce Smartling i file di risorse ResX e .NET?
Smartling considera RESX come un tipo di file di risorse di prima classe anziché un XML generico: .resx e .resw I file fino a 10 MB vengono caricati tramite la dashboard, l'API File, la CLI di Smartling o il connettore GitHub, e il parser estrae il valore di ciascun elemento <data> come stringa traducibile, utilizzando il suo name come chiave e il suo <comment> come istruzione di traduzione. Poiché la chiave name accompagna ogni stringa, la stessa stringa presente in Strings.de-DE.resx e Strings.ja-JP.resx rimane allineata alla sua origine senza bisogno di un passaggio di mappatura tramite foglio di calcolo.
La gestione dei segnaposto è la parte più importante per .NET: il formato dei segnaposto RESX riconosce i token {0} e {1} come segnaposto bloccati, e un'espressione regolare placeholder_format_custom copre i progetti che utilizzano le proprie convenzioni. I cinque caratteri XML riservati vengono sottoposti a escape nelle traduzioni consegnate per impostazione predefinita, con le direttive entity_escaping, entity_escaping_type e entity_escaping_strategy disponibili quando un progetto necessita che le entità HTML5 vengano preservate o che l'escape del codice sorgente venga propagato. Per il controllo qualità pre-traduzione, pseudo_inflation restituisce un file .resx pseudo-tradotto. file con stringhe allungate di una percentuale configurabile in modo che i difetti di impaginazione emergano prima che vengano spesi i soldi per la traduzione. Sul fronte dell'automazione, il connettore GitHub monitora un ramo, crea processi di traduzione a partire dai file di risorse modificati e conferma i file tradotti, mentre il connettore Repository estende lo stesso schema a GitLab e Beanstalk. Il file tradotto viene sempre restituito nello stesso formato di partenza, quindi non è necessario alcun passaggio di conversione successivo alla traduzione.
Pronto a vedere Smartling in azione?
Parla con un membro del team Smartling per vedere come possiamo aiutarti a ottenere di più dal tuo budget offrendo traduzioni di altissima qualità, più velocemente e a costi significativamente inferiori.