سؤال

هل من الممكن ، مع حزم الموارد و 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);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top