Как поставить условный пробел между словами?

#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 Сообщение служит примером, и да, оно может быть лучше. Но это не суть вопроса. Как говорится в названии: «Как поставить условный пробел между словами?»