#javascript
#javascript
Вопрос:
Существует объект, хранящий строки перевода. Строка перевода может содержать {user} отмеченный заполнитель, который будет использоваться в логическом коде:
const translations = {
...
'outOfQuota': 'Dear {userName}, you are out of space!'
}
Логика кода, который отображает сообщение, должна показывать его, когда у нас есть имя пользователя:
Dear Jack, you are out of space!
Однако могут быть ситуации, когда пользователь вошел в систему, но пользовательский объект не определен или равен нулю. Кроме того, иногда имя пользователя может быть неопределенным.
В такой ситуации должно отображаться немного другое сообщение:
Dear, you are out of space!
В настоящее время я решил эту проблему, удалив пробел между ‘Dear’ и заполнителем:
const translations = {
...
'outOfSpace': 'Dear{userName}, you are out of space!'
}
И написание условной логики для размещения пробела и имени или пустой строки:
// Long code that results in setting:
const user.userName = 'John';
...
const userName = user amp;amp; user.userName ? ` ${user.userName}` : ``; // (4)
const message = translations.outOfSpace.replace('{userName}', userName);
Однако мне не нравится, как выглядит строка 4 и предложение перевода. Это трудно читать.
Есть ли какой-нибудь способ сделать так, чтобы это выглядело лучше?
Комментарии:
1. Одним из небольших улучшений было бы использование необязательной цепочки при
user amp;amp; user.userName
проверке, чтобы просто статьuser?.userName
2. Вам нужны методы функции или класс. У меня есть решения для этого
3. Я думаю, что было бы целесообразно иметь разные записи в объекте translations для сообщений, которые могут быть доставлены с некоторой информацией или без нее.
4. Я бы начал с переписывания этого сообщения. Два общих правила для сообщений, создаваемых приложением: 1. Избегайте восклицательного знака. Сообщения обычно недостаточно интересны для этого. Представьте, что вы идете на работу или что-то в этом роде, и кто-то подходит к вам с криком «Ваш ящик полон!». Это примерно эквивалентно добавлению восклицательного знака. Люди, скорее всего, будут уведомлять вас менее взволнованно и ровным тоном. 2. Избегайте обращения к пользователю в семейной манере. «Дорогой Джон» звучит странно во многих случаях. Программа мне не друг. Ему просто нужно мне что-то сказать, а не притворяться, что он меня уважает.
5. @VLAZ Сообщение служит примером, и да, оно может быть лучше. Но это не суть вопроса. Как говорится в названии: «Как поставить условный пробел между словами?»
Ответ №1:
Сделайте это функцией. Вы можете сделать это однострочным кодом в es6
const translations = {
...,
outOfQuota: function(name){
return `Dear${name ? ` ${name}`: ""}, you are out of space!`
}
}
вы также можете добавить значение по умолчанию в аргументе, когда оно не определено
Комментарии:
1. Я просто хочу отметить, что «Дорогой, тебе не хватает места!» звучит довольно тревожно и совсем не сравнимо с «Дорогой Джон, тебе не хватает места!». Хотя оба эти сообщения не очень хороши для пользователя, но просто пропуск имени пользователя сильно меняет сообщение.
2. Предложение должно быть помещено в виде строки в файл перевода. Там не может быть функции. Потому что переводчики должны получать его в виде строк
3. @VLAZ Сообщение служит примером, и да, оно может быть лучше. Но это не суть вопроса. Как говорится в названии: «Как поставить условный пробел между словами?»