У меня есть много строк ресурсов, таких как вторая, каждая из которых включает в себя какую-то другую строку ресурсов.
Вместо хранения готовых строк формата, готовых к использованию, вы можете хранить исходные материалы для построения строк реального формата и добавлять код, чтобы расширять их программно перед использованием. Например, вы можете хранить строки следующим образом:
BadRequestParameter: Potential bad request aborted before execution.
SupportNumber: (123)456-7890
CallTechSupport: You need to call technical support at {SupportNumber}.
RequiredParameterConstraint: {{0}} parameter requires a value. {BadRequestParameter} {CallTechSupport}
Конечно, передача этих строк в string.Format
как есть не будет работать. Вам нужно проанализировать эти строки, например, с помощью RegExp
s, и найти все случаи, когда у вас есть слово между фигурными скобками, а не число. Затем вы можете заменить каждое слово его порядковым номером и создать массив параметров на основе имен, которые вы найдете в фигурных скобках. В этом случае вы получите эти два значения (псевдокод):
formatString = "{{0}} parameter requires a value. {0} {1}";
// You replaced {BadRequestParameter} with {0} and {CallTechSupport} with {1}
parameters = {
"Potential bad request aborted before execution."
, "You need to call technical support at (123)456-7890."
};
Примечание: Конечно, для создания этого массива parameters
требуется рекурсия.
На данный момент, вы можете вызвать string.Format
для создания вашей последней строки:
var res = string.Format(formatString, parameters);
Возвращает строку, в которой строки ресурсов предварительно заменены для ваших вызывающих:
"{0} parameter requires a value. Potential bad request aborted before execution. You need to call technical support at (123)456-7890."
Теперь вызывающие абоненты могут использовать эту строку для форматирования, не беспокоясь о других значениях ресурса.