I've been researching about xliff and po i18n files formats and it seems they are widely used and supported. There are plenty of free tools to manage the translations in xliff/po files.
However, so far I could not find a good solution of how to use the xliff or po files in .net (C#/ASP.Net) projects. I would expect some sort of xliff/po => resx
converter, but so far haven't found one yet.
However at the same time many tools do support the conversion of xliff/po files into java .properties format.
If you have an experience implementing l10n via xliff or po files in .Net projects - please provide advice and share the best practices on how it works.
PS: I would prefer using xliff format, since I find it cleaner and more feature-reach, but po is also an option.
PO and XLIFF files usually work differently:
PO files are resource files that get complied into a binary format and then accessed using gettext() libraries. Sometimes PO is used as an extraction format like XLIFF, but that is not its original purpose.
XLIFF are extraction files that get created by extracting your resource file (e.g. resx) into XLIFF, and then merged back into the original format.
so for XLIFF you should be looking for a tools doing resx -> xliff -> resx
rather than xlif -> resx
.
The tools that extract/merge XLIFF files are usually called filters. There are quite a few commercial translation tools that will accept XLIFF, and some that can also create XLIFF (Swordfish, Trados Studio, etc.).
There are also a few open-source tools that can extract/merge XLIFF: File2XLIFF4j for example (but I don't think it supports resx).
Rainbow, from the Okapi project, does support resx. The "old" .net version (Rainbow 5: Okapi on SourceForge) has a filter dedicated to resx file and can handle them very well; even with binary data. It may run into problem with third party controls though (See http://okapi.sourceforge.net/Release/Filters/Help/netres.htm for details).
The new java version (Rainbow 6: http://code.google.com/p/okapi/) support resx through its XML filter and works fine with simple resx, but if you have binary data in them the text in those entries will not be extracted.
-ys