Sorunuzu cevaplamak için seçtim (2).
Pratikte, benim için Java kaynak paketlerinden çok başka bir şey kullanmanın çok daha kolay olduğunu buldum.
Kişisel olarak bunu farklı bir şekilde kullanıyorum. Ben gettext yolunu kullanıyorum (gettext uzantılarından yararlanmak için uygulamanızda kullanmanız gereken GetTextResource.java adında bir dosya var - bkz. here).
Eğer ile tanıyorsanız, gettext ile bu yöntemi çok daha kolay ve pratik bulacaksınız. Sadece çevirmeninize po dosyaları (poedit ile düzenlenebilir) verin. Uygulamanızın içinde kullanacağınız pova sınıfından oluşturduğunuz po dosyalarından (bu, msgfmt kullanılarak yapılır - po dosyalarının java derlenmesi için parametreler belirlenir). Po dosyaları xgettext komutu (komut satırından) kullanılarak oldukça kolay bir şekilde güncellenebilir.
Elbette her şey gettext manual'un içindedir.
Avantajları: (N bir sayıdır) "N dosya (lar) silindi" - ngettext bkz:
gettext'lerle size çoğul formu [gibi artık mesaj seçmek için bir yol sunar.
java dosyaları yeni jeton
bazı makrolar kullanarak her dize erişmek gerek güncellenir kez dizeleri tercüme için komut dosyası yöntemi (gibi çevirme (DELETE_BUTTON_MACRO)). Sadece bu gibi kod yazmak: İyi şanslar:
package translateutil;
import gnu.gettext.GettextResource;
import java.util.ResourceBundle;
import java.util.Locale;
public class TranslateUtil
{
private static ResourceBundle myResources =null;
public static boolean init(Locale loc, String resourceName)
{
boolean bRet = true;
Locale.setDefault(loc);
try
{
myResources = ResourceBundle.getBundle(resourceName);
System.out.printf( _("Current language: %s\n"),
Locale.getDefault().getDisplayName());
System.out.printf( _("%s resource found\n"),
myResources.getClass().getName());
}
catch(Exception e)
{
// let the application go on in English in case the ResourceBundle
// was not found. Notify about the error
bRet = false;
System.out.println(e.toString());
myResources = null;
}
return bRet;
}
public static String _(String str)
{
if (myResources == null)
{
return str;
}
{
return GettextResource.gettext(myResources, str);
}
}
public static String _Plural(String singular, String plural, long param)
{
if (myResources == null)
{
if (param == 1)
{
return singular;
}
else
{
return plural;
}
}
else
{
return GettextResource.ngettext(myResources, singular, plural, param);
}
}
}
İşte
bir numuneyi olursa olsun seçim ne
// example
// similar for plural
import static translateutil.TranslateUtil._;
System.out.println(_("The english text"));
olduğunu!
harika! Burada yükselttiğiniz şeylerin çoğunun farkındayım, ancak bunu düzenleyerek açıklığa kavuşturuldunuz. Ve umarım gelecekteki stackoverflowees yararlı bulacaktır. – jlarson