اختبار للمعلمة فارغة في ملف .properties لـ MessageFormat
-
21-09-2019 - |
سؤال
هل من الممكن ، مع حزم الموارد و messageformat للحصول على النتيجة التالية؟
- عندما أتصل
getBundle("message.07", "test")
للحصول على"Group test"
- عندما أتصل
getBundle("message.07", null)
للحصول على"No group selected"
كل مثال وجدته على الإنترنت هو مع الكواكب ، مع ملفات على القرص وما إلى ذلك.
أنا فقط بحاجة إلى التحقق مما إذا كانت معلمة واحدة null
(أو غير موجود) في ملف خصائص حزمة الموارد. آمل أن أجد تنسيقًا خاصًا للمعلمة الفارغة شيئًا مثل {0,choice,null#No group selected|notnull#Group {0}}
.
الطريقة التي أستخدمها للحصول على الحزم هي:
public String getBundle(String key, Object... params) {
try {
String message = resourceBundle.getString(key);
if (params.length == 0) {
return message;
} else {
return MessageFormat.format(message, params);
}
} catch (Exception e) {
return "???";
}
}
أنا أيضا أسمي هذه الطريقة لحزم أخرى ، مثل
getBundle("message.08", 1, 2)
=>"Page 1 of 2"
(دائما المعلمات ، لا حاجة للتحقق منnull
)getBundle("message.09")
=>"Open file"
(لا توجد معلمات ، لا حاجة للتحقق منnull
)
ماذا يجب أن أكتب في ملف .properties message.07
لوصف النتيجة؟
ما لدي الآن هو:
message.07=Group {0}
message.08=Page {0} of {1} # message with parameters where I always send them
message.09=Open file # message without parameters
المحلول
لك .properties
ملف،
message.07=Group {0}
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected
ثم تحتاج إلى تغيير الكود الخاص بك لوضع شيك صريح params
إلى عن على null
. و إذا null
ثم يمكنك أن تفعل شيئًا مثل resourceBundle.getString(NULL_MSG)
. أين NULL_MSG
سيكون هذا ،
private static final String NULL_MSG = "message.null";
لذا ، ستصبح طريقتك الأصلية الآن مثل هذا.
public String getBundle(String key, Object... params) {
String message = null;
try {
if (params == null) {
message = resourceBundle.getString(NULL_MSG);
} else {
message = MessageFormat.format(resourceBundle.getString(key), params);
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
استدعاء طريقتي مثل أدناه ،
getBundle("message.07", "test") // returning 'Group test'
getBundle("message.07", null) // returning 'No group selected'
getBundle("message.08", 1, 2) // returning 'Page 1 of 2'
getBundle("message.08", null) // returning 'No group selected'
getBundle("message.09", new Object[0]) // returning 'Open file'
getBundle("message.09", null) // returning 'No group selected'
أخبرني الآن أين المشكلة؟
نصائح أخرى
سأوصي بعدم محاولة تغيير وظيفة الحزمة (حتى لو كان لديك طريقة getBundle التي تغلفها).
ببساطة افعل في الكود الخاص بك:
getBundle(param == null? "message.07.null": "message.07", param)
أو جعل طريقة أخرى:
getBundleOrNull("message.07", param, "message.07.null")
هذا يفعل
public String getBundleOrNull(String key, value, nullKey) {
return getBundle(value == null? nullKey: key: value);
}