4 Aralık 2017 Pazartesi

MessageFormat Sınıfı

Giriş
Şu satırı dahil ederiz
import java.text.MessageFormat;
String'i verilen parametrelere göre formatlar. String döner. Açıklaması şöyle. String.format() nasıl %s, %d gibi formatlama parametreleri kullanıyorsa, MessageFormat da {0}, {1} gibi parametreler kullanır
The java.text.MessageFormat type is like the older sibling of String::format, as it uses the same approach of using format String container specifiers. However, it’s more verbose and its syntax is unfamiliar to many devs these days.
format metodu - arguments
İmzası şöyle
public final String format (Object obj) 
Örnek
Şöyle yaparız
var format = new MessageFormat("Hello {0}, how are you?\nIt's {1}°C today!");
var greeting = format.format(name, tempC);
format metodu - pattern + arguments
İmzası şöyle
public static String format(String pattern, Object ... arguments)
Örnek
Şöyle yaparız
MessageFormat.format("Today is {0}/{1}/{2}", this.day, this.month, this.year); 
Örnek
Format string'ini dosyadan okuyabiliriz. İngilizce için mesajımız şöyle olsun
user.notfound=Username '{0}' not found!
İspanyolca için şöyle olsun.
user.notfoundUsuario '{0}' no encontrado!
Dilden bağımsız kod yazmak için şöyle yaparız.
ResourceBundle.getBundle("messages").getString("user.notfound");
MessageFormat.format(ex, new Object[] {username}));
Örnek
Tek tırnağı yine tek tırnak ile escape etmek gerekir. Şöyle yaparız.
String s = "{0} {1} ''x {2}";

System.out.println(MessageFormat.format(s,"1","2","3"));
format metodu
İmzası şöyle
public final StringBuffer format(Object arguments, StringBuffer result,
                                 FieldPosition pos)
Örnek ver

setFormatByArgumentIndex metodu

Handling Plurals yazısına bakabilirsiniz

Örnek
Şöyle yaparız.
MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
double[] filelimits = {0,1,2};
String[] filepart = {"no files","one file","{0,number} files"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
form.setFormatByArgumentIndex(0, fileform);

int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};

System.out.println(form.format(testArgs));
Çıktı olarak şunu alırız
The disk "MyDisk" contains no files.
The disk "MyDisk" contains one file.
The disk "MyDisk" contains 1,273 files.

Hiç yorum yok:

Yorum Gönder