Введение
Функционал локализации Laravel предоставляют удобный способ извлечения строк разных языков, что позволяет легко поддерживать мультиязычность интерфейса вашего приложения.
Laravel предлагает два способа управления строками перевода. Во-первых, языковые строки могут храниться в файлах в каталоге . В этом каталоге могут быть подкаталоги для каждого языка, поддерживаемого приложением. Это подход, который Laravel использует для управления строками перевода собственного функционала, например сообщений об ошибках валидации:
Или строки перевода могут быть определены в файлах JSON, которые помещаются в каталог . При таком подходе каждый язык, поддерживаемый вашим приложением, будет иметь соответствующий файл JSON в этом каталоге. Этот подход рекомендуется для приложений с большим количеством переводимых строк:
Мы обсудим каждый подход по управлению строками перевода в этой документации.
Конфигурирование языка по умолчанию
Язык по умолчанию для вашего приложения хранится в параметре конфигурационного файла . Вы можете изменить это значение в соответствии с потребностями вашего приложения.
Вы можете изменить язык по умолчанию для одного HTTP-запроса во время выполнения, используя метод фасада :
Вы можете указать «резервный язык», который будет использоваться, когда активный язык не содержит конкретной строки перевода. Как и язык по умолчанию, резервный язык также задается в конфигурационном файле :
Определение текущего языка
Вы можете использовать методы и фасада , чтобы определить текущий язык или проверить соответствие указанного языка:
Как вывести на главный экран контакты для быстрого вызова
В встроенном приложении Звонки на смартфонах Realme есть возможность добавления иконки контакта на рабочий стол:
- Включаем системное приложение «Вызовы», заходим во вкладку «Контакты».
- Теперь нужно выбрать 3 избранных контакта. Для этого зажимаем нужный номер и нажимаем на пункт «Добавить в избранное».
- Вверху списка всех контактов будут помечены желтой звездочкой выбранные вами контакты.
- Закрываем приложение, очищаем недавние приложения (оперативную память).
- После на главном экране зажимаем иконку приложения Звонки (трубка) и перед нами появится окно с быстрыми действиями.
- Зажимаем нужный контакт и перетаскиваем его на рабочий стол.
С помощью этой инструкции за один раз можно добавить до 3 избранных контактов. Первые три контакта нужно просто убрать из группы и добавить следующие, и так по кругу.
Раскладка клавиатуры для консоли
OpenRC
Раскладка клавиатуры, используемая консолью, устанавливается в файле /etc/conf.d/keymaps с помощью переменной keymap. Допустимые значения можно найти в каталоге /usr/share/keymaps/YOUR_ARCH/. Каталог архитектуры i386 содержит подкаталоги, соответствующие различным раскладкам (qwerty/, azerty/ и так далее). У некоторых языков есть несколько вариантов — поэкспериментируйте с ними, чтобы определить более подходящий.
Файл Установка раскладки клавиатуры для консоли
keymap="de" #keymap="de-latin1" #keymap="de-latin1-nodeadkeys"
systemd
В systemd раскладка для консоли может быть установлена с помощью команды localectl. Сперва проверьте доступные раскладки:
Далее установите необходимую раскладку для консоли:
В конце проверьте, что раскладка для консоли была установлена правильно:
VC Keymap: it
Как откалибровать датчика приближения
Если например, при звонке экран не гаснет, или наоборот не включается когда телефон убирается от уха – то скорее всего датчик приближения работает не правильно.
Проверяем как он работает через инженерное меню
- Заходим в приложение «Звонки» — вводим код *#899#.
- Выбираем пункт «Manual test».
- Листаем до вкладки «Device debugging» и выбираем пункт «Proximity sensor test».
- Здесь проверяем как работает датчик, закрываем рукой верхнюю часть телефона, и если экран становится зеленым и значения света меняются – датчик приближения на Realme работает нормально.
- Если тест не пройдет – возвращаемся назад и выбираем пункт «Калибровка».
Еще датчик можно проверить через приложение Sensor Box For Android. Выбираем «Proximity Sensor» и опять закрывает верхнюю часть телефона рукой. Значение должно быть равно 5 — это норма.
Также можно попробовать просто перезагрузить телефон, в большинстве случаев это помогает. Еще важный момент, если наклеено защитное стекло (особенно с цветной рамкой) или пленка — то в таком случае это может мешать датчикам и влиять на их работу
Обратите на это внимание
Получение строк перевода
Вы можете получить строки перевода из ваших языковых файлов с помощью глобального помощника . Если вы используете «короткие ключи» для определения ваших строк перевода, то вы должны передать файл, содержащий ключ, и сам ключ в функцию , используя «точечную нотацию». Например, давайте извлечем строку перевода из языкового файла :
Если указанная строка перевода не существует, то функция вернет ключ строки перевода. Итак, используя приведенный выше пример, функция вернет , если строка перевода не существует.
Если вы используете свои , то вы должны передать перевод вашей строки по умолчанию в функцию :
Опять же, если строка перевода не существует, то функция вернет ключ строки перевода, который ей был передан.
Если вы используете шаблонизатор Blade, то вы можете использовать синтаксис для вывода строки перевода:
Замена параметров в строках перевода
При желании вы можете определить метку-заполнитель в строках перевода. Все заполнители имеют префикс . Например, вы можете определить приветственное сообщение с именем-заполнителем:
Чтобы заменить заполнители при получении строки перевода, вы можете передать массив для замены в качестве второго аргумента функции :
Если все буквы заполнителя заглавные или заполнитель имеет только первую заглавную букву, то переведенное значение будет с соответствующим регистром:
Плюрализация
Плюрализация – сложная задача, поскольку разные языки имеют множество сложных правил плюрализации; однако Laravel может помочь вам переводить строки по-разному в зависимости от правил множественного числа, которые вы определяете. Используя мета-символ , вы можете различать формы единственного и множественного числа строки:
Конечно, множественное число также поддерживается при использовании :
Вы даже можете создать более сложные правила множественного числа, которые определяют строки перевода для нескольких диапазонов значений:
После определения строки перевода, которая имеет параметры множественного числа, вы можете использовать функцию для извлечения строки соответствующую указанному «количеству». В этом примере, поскольку количество больше единицы, возвращается форма множественного числа строки перевода:
Вы также можете определить метку-заполнитель в строках множественного числа. Эти заполнители могут быть заменены передачей массива в качестве третьего аргумента функции :
Если вы хотите отобразить целочисленное значение, переданное в функцию , то вы можете использовать встроенный заполнитель :
Модальный глагол Must и оборот Have to
Синонимом глагола must является оборот have to — быть должным. В отличие от must, он может использоваться в любом времени. В отрицательной форме он выражает не запрет, а отсутствие необходимости («не должен»). Между ними есть довольно тонкая смысловая разница.
Must используется как «сильное» долженствование, выражая обязанность или необходимость сделать что-то, что вы действительно считаете необходимым, имеющее к вам личное отношение, а также что-то крайне важное. Have to может выражать «мягкое» долженствование: необходимость что-то сделать, зачастую вынужденная, иногда не такая уж и важная
Have to может выражать «мягкое» долженствование: необходимость что-то сделать, зачастую вынужденная, иногда не такая уж и важная.
Однако в разговорной речи have to часто используется в том же значении, что и must.
Это предложение можно понять двояко: 1) я должен сдать экзамен, потому что вынужден, обязан, 2) я должен сдать экзамен, потому что это мой личный моральный долг (как с глаголом must).
Попробуем сравнить два предложения с must и have to, чтобы лучше понять разницу. Компания ушла в поход, в процессе выяснилось, что Тиму трудно нести свои вещи. Приходится ему помогать.
В этом случае Тим — это наш друг, мы не может его бросить, ему нужно, обязательно нужно помочь. Ну и что, что взял больше вещей, чем может нести? Мы ему поможем. На нашем месте Тим поступил бы так же.
Какой-то Тим взял больше барахла, чем он в состоянии утащить. Из-за него всем приходится идти медленнее, он постоянно просит подождать. Придется ему помочь, но в следующий раз мы его с собой не возьмем.
Это очень приблизительный пример, потому что вариант с have to может подойти и для первого случая с Тимом-другом. Многое зависит от контекста, конкретного случая и даже того, с какой интонацией вы скажете фразу.
Вообще, в разговорной речи намного чаще используют have to, когда нужно сказать что-то вроде «я должен», «я вынужден», «мне приходится» и т. д.
toWeek(date[, mode][, timezone])
Переводит дату-с-временем или дату в число UInt8, содержащее номер недели. Второй аргументам mode задает режим, начинается ли неделя с воскресенья или с понедельника и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, то используется режим 0.
эквивалентно .
Описание режимов (mode):
Mode | Первый день недели | Диапазон | Неделя 1 это первая неделя … |
---|---|---|---|
Воскресенье | 0-53 | с воскресеньем в этом году | |
1 | Понедельник | 0-53 | с 4-мя или более днями в этом году |
2 | Воскресенье | 1-53 | с воскресеньем в этом году |
3 | Понедельник | 1-53 | с 4-мя или более днями в этом году |
4 | Воскресенье | 0-53 | с 4-мя или более днями в этом году |
5 | Понедельник | 0-53 | с понедельником в этом году |
6 | Воскресенье | 1-53 | с 4-мя или более днями в этом году |
7 | Понедельник | 1-53 | с понедельником в этом году |
8 | Воскресенье | 1-53 | содержащая 1 января |
9 | Понедельник | 1-53 | содержащая 1 января |
Для режимов со значением «с 4 или более днями в этом году» недели нумеруются в соответствии с ISO 8601:1988:
-
Если неделя, содержащая 1 января, имеет 4 или более дней в новом году, это неделя 1.
-
В противном случае это последняя неделя предыдущего года, а следующая неделя — неделя 1.
Для режимов со значением «содержит 1 января», неделя 1 – это неделя содержащая 1 января. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день.
Пример
Запрос:
Результат:
Как отключить всю рекламу в Realme без Root-прав
В Relame UI, в отличии от MIUI, нет встроенной рекламы в системе или фирменных приложениях. Но в обычных сторонних приложениях она есть. С помощью системных настроек большую часть раздражающей рекламы можно скрыть.
- Заходим в «Настройки» — «Подключение и общий доступ».
- Листаем ниже и выбираем пункт «Частная DNS» — «Заданная частная DNS».
- Теперь в появившемся окне пишем одну из этих сетей dot-de.blahdns.com или dns.adguard.com.
- Все, теперь большинство рекламных объявлений будут скрыты.
У этого способа есть и минусы, например:
- Скорость сети может сильно упасть, так как все интернет-запросы будут проходить через указанный dns сервер.
- Могут перестать работать некоторые приложения и сервисы.
- Если использовать приложения со встроенной рекламой, где например чтобы получить бесплатный бонус нужно просмотреть видеорекламу, то скорее всего у вас просто покажется пустой экран, без возможности пропуска.
Здесь нужно выполнить небольшой тест, и понаблюдать как будут вести себя ваши приложения. Если появились какие-то проблемы, то или попробуйте сменить DNS, или не используйте его вообще.
LINGUAS
ПредупреждениеLINGUAS causes packages to implicitly skip locales. When using it, the package manager cannot determine which locales were omitted. Do not use LINGUAS if you intend to redistribute binary packages.
There is also an additional LINGUAS variable that is used by some gettext-based build systems to control which localization files are built and installed. The variable takes in space-separated list of language codes, and a suggested place to set it is /etc/portage/make.conf:
## (Настройка переменной LINGUAS. Например, для германского, финского и английского:) LINGUAS="de fi en"
Обратите внимание что есть большая разница между не установленной переменной LINGUAS и установленой в значение пустого значения (), большая часть файлов ebuild устанавливает только язык по умолчанию пакета, но не устанавливает файлы .
toTimeZone
Переводит дату или дату с временем в указанный часовой пояс. Часовой пояс — это атрибут типов и . Внутреннее значение (количество секунд) поля таблицы или результирующего столбца не изменяется, изменяется тип поля и, соответственно, его текстовое отображение.
Синтаксис
Синоним: .
Аргументы
- — время или дата с временем. DateTime64.
- — часовой пояс для возвращаемого значения. String.
Возвращаемое значение
Дата с временем.
Тип: DateTime.
Пример
Запрос:
Результат:
изменяет тип в . Значение (unix-время) 1546300800 остается неизменным, но текстовое отображение (результат функции toString()) меняется в .
Строки, Intl.Collator
Синтаксис:
Параметры:
-
Локаль, одна или массив в порядке предпочтения.
-
Объект с дополнительными настройками:
-
– алгоритм выбора подходящей локали.
-
– цель сравнения: сортировка или поиск , по умолчанию .
-
– чувствительность: какие различия в символах учитывать, а какие – нет, варианты:
- – учитывать только разные символы, без диакритических знаков и регистра, например: , , .
- – учитывать символы и диакритические знаки, например: , , .
- – учитывать символы и регистр, например: , , .
- – учитывать всё: символ, диакритические знаки, регистр, например: , , , используется по умолчанию.
-
– игнорировать знаки пунктуации: , по умолчанию .
-
– использовать ли численное сравнение: , если , то будет , иначе .
-
– в сортировке должны идти первыми прописные или строчные буквы, варианты: (прописные), (строчные) или (стандартное для локали, также является значением по умолчанию). Не поддерживается IE11.
-
В подавляющем большинстве случаев подходят стандартные параметры, то есть указывать не нужно.
Использование:
Результат имеет значение (больше), (равно) или (меньше).
Например:
Выше были использованы полностью стандартные настройки. Они различают регистр символа, но это различие можно убрать, если настроить чувствительность :
Процесс прост
Кликаете по кнопке . выбираете переводы для отправки и
После этого просто импортируете файл в новый Google Sheet ( в Google Sheets) и можете делиться им с переводчиками.
После завершения ими работы:
- Экспортируйте файл с Google Sheets в формате .
- Снова откройте проект в BabelEdit.
- Импортируйте обновленный файл.
- изменения.
Теперь все переводы помещены в приложение!
Только помните — мы всегда работаем слева направо:
Если дополнительно начать вносить правки внутри приложения, то они просто будут перезаписаны при следующем импорте и сохранении файла с Google Sheets. Поэтому лучше так не делать.
Шаг 7: возвращение сегментам ясности
После перевода всех сегментов при редактировании кода будет сложно разобрать что есть что. Тут нас выручит i18n-ally.
Что не переведётся на русской язык в Among Us?
Надписи внизу справа экрана — «Customize», «Use» и «Report», не переведутся, какой бы язык вы ни выбрали в настройках. Однако, они не нуждаются в переводе, так как те, кто хоть раз играл в Амонг Ас, поймут назначение этих кнопок. Также на английском останутся некоторые другие интуитивно понятные элементы интерфейса.
Надписи на карте тоже не переведутся. Они являются частью текстуры, то есть изображения. Однако пояснения к карте, список заданий и другие важные для геймплея надписи будут на русском языке.
К слову, некоторые игроки уже начали разработки карт для игры на русском языке. Однако, они не входят в официальный состав самой игры, и требуют отдельной установки на устройство. Таких карт пока очень мало. Но такая тенденция является хорошим сигналом. Это значит, что скоро появится больше карт для всех устройств, которые будут отличного качества. И, не исключено, что разработчики упростят жизнь русскоязычной аудитории и добавят новые русские карты в одну из сборок обновления Amog Us. Ну а пока можно довольствоваться тем, что имеется, а имеется достаточно много.
Определение строк перевода
Использование коротких ключей
Обычно строки перевода хранятся в файлах в каталоге . В этом каталоге должен быть подкаталог для каждого языка, поддерживаемого вашим приложением. Это подход, который Laravel использует для управления строками перевода собственного функционала, например сообщений об ошибках валидации:
Все языковые файлы возвращают массив строк с ключами. Например:
Использование строк перевода в качестве ключей
Для приложений с большим количеством переводимых строк определение каждой строки с помощью «короткого ключа» может сбивать с толку при обращении к ключам в ваших шаблонах, и постоянно изобретать ключи для каждой строки перевода, поддерживаемой вашим приложением, затруднительно.
По этой причине Laravel предлагает определение строк перевода с использованием переводимой строки в качестве ключа «по умолчанию». Файлы перевода, которые используют строки перевода в качестве ключей, хранятся как файлы JSON в каталоге . Например, если ваше приложение имеет испанский перевод, то вы должны создать файл :
Конфликты ключей и имен файлов
Вы не должны определять строковые ключи перевода, которые конфликтуют с именами файлов перевода. Например, перевод для языка при условии существования файла и отсутствии файла приведет к тому, что переводчик Laravel вернет содержимое всего файла .
Числа, Intl.NumberFormat
Форматтер умеет красиво форматировать не только числа, но и валюту, а также проценты.
Синтаксис:
Параметры, как и раньше – локаль и опции.
Список опций:
Свойство | Описание | Возможные значения | По умолчанию |
---|---|---|---|
Алгоритм подбора локали | , | ||
Стиль форматирования | , , | ||
Алфавитный код валюты | См. Список кодов валюты, например | ||
Показывать валюту в виде кода, локализованного символа или локализованного названия | , , | ||
Разделять ли цифры на группы | , | ||
Минимальное количество цифр целой части | от до | ||
Минимальное количество десятичных цифр | от до | для чисел и процентов , для валюты зависит от кода. | |
Максимальное количество десятичных цифр | от до . | для чисел , для процентов , для валюты зависит от кода. | |
Минимальное количество значимых цифр | от до | ||
Максимальное количество значимых цифр | от до |
Пример без опций:
С ограничением значимых цифр (важны только первые 3):
С опциями для валюты:
С двумя цифрами после запятой:
date_diff
Вычисляет разницу между двумя значениями дат или дат со временем.
Синтаксис
Синонимы: , .
Аргументы
-
— единица измерения времени, в которой будет выражено возвращаемое значение функции. String.
Возможные значения: -
— первая дата или дата со временем, которая вычитается из . Date или DateTime.
-
— вторая дата или дата со временем, из которой вычитается . Date или DateTime.
-
— (необязательно). Если этот аргумент указан, то он применяется как для , так и для . Если этот аргумент не указан, то используются часовые пояса аргументов и . Если часовые пояса аргументов и не совпадают, то результат не определен. String.
Возвращаемое значение
Разница между и , выраженная в .
Тип: Int.
Пример
Запрос:
Результат:
Ручная установка нужной версии Календаря из APK с поддержкой русского языка на Xiaomi
Если два предыдущих метода результата не дали, будем работать руками, а именно, скачаем нужный APK и установим версию календаря, которая не брезгует русским языком.
По этой ссылке перейдите на сайт APKMirror, APK файлы на нём безопасны, угрозы не представляют.
Вы увидите список нескольких последних версий приложений для MIUI 11, если у вас иная версия оболочки, в строке поиска APKMirror укажите «Mi Calendar 10» или «Mi Calendar 12» в зависимости от версии MIUI на вашем телефоне.
Начиная с самой старшей версии скачивайте APK и устанавливайте их, после чего перезагружайте смартфон и проверяйте вернулся ли русский язык.
Да, этот метод муторный и даже он может помочь не всем, но оставшийся способ решения вовсе кардинальный и не все на него согласятся.
Перевод строки в Date
- 4 цифры для года (yyyy);
- 2 цифры для месяца (ММ);
- 2 цифры для дня (dd);
- 2 цифры для часов в 24-часовом формате (HH);
- 2 цифры для минут (mm);
- 2 цифры для секунд (ss).
SimpleDateFormat
Символ | Описание | Пример |
---|---|---|
G | эра (в английской локализации — AD и BC) | н.э. |
y | год (4-х значное число) | 2020 |
yy | год (последние 2 цифры) | 20 |
yyyy | год (4-х значное число) | 2020 |
M | номер месяца (без лидирующих нулей) | 8 |
MM | номер месяца (с лидирующими нулями, если порядковый номер месяца < 10) | 04 |
MMM | трехбуквенное сокращение месяца (в соответствии с локализацией) | янв |
MMMM | полное название месяца | Июнь |
w | неделя в году (без лидирующих нулей) | 4 |
ww | неделя в году (с лидирующими нулями) | 04 |
W | неделя в месяце (без лидирующих нулей) | 3 |
WW | неделя в месяце (с лидирующим нулем) | 03 |
D | день в году | 67 |
d | день месяца (без лидирующих нулей) | 9 |
dd | день месяца (с лидирующими нулями) | 09 |
F | день недели в месяце (без лидирующих нулей) | 9 |
FF | день недели в месяце (с лидирующими нулями) | 09 |
E | день недели (сокращение) | Вт |
EEEE | день недели (полностью) | пятница |
u | номер дня недели (без лидирующих нулей) | 5 |
uu | номер дня недели (с лидирующими нулями) | 05 |
a | маркер AM/PM | AM |
H | часы в 24-часовом формате без лидирующих нулей | 6 |
HH | часы в 24-часовом формате с лидирующим нулем | 06 |
k | количество часов в 24-часовом формате | 18 |
K | количество часов в 12-часовом формате | 6 |
h | время в 12-часовом формате без лидирующих нулей | 6 |
hh | время в 12-часовом формате с лидирующим нулем | 06 |
m | минуты без лидирующих нулей | 32 |
mm | минуты с лидирующим нулем | 32 |
s | секунды без лидирующих нулей | 11 |
ss | секунды с лидирующим нулем | 11 |
S | миллисекунды | 297 |
z | часовой пояс | EET |
Z | часовой пояс в формате RFC 822 | 300 |
Шаблон | Пример |
---|---|
dd-MM-yyyy | 01-11-2020 |
yyyy-MM-dd | 2019-10-01 |
HH:mm:ss.SSS | 23:59.59.999 |
yyyy-MM-dd HH:mm:ss | 2018-11-30 03:09:02 |
yyyy-MM-dd HH:mm:ss.SSS | 2016-03-01 01:20:47.999 |
yyyy-MM-dd HH:mm:ss.SSS Z | 2013-13-13 23:59:59.999 +0100 |
SimpleDateFormatjava string to dateSimpleDateFormat
-
Создаем строку, с которой нужно задать дату:
-
Создаем новый объект SimpleDateFormat с шаблоном, который совпадает с тем, что у нас в строке (иначе распарсить не получится):
Как вы видите, у нас тут появился аргумент Locale. Если же мы его опустим, он будет использовать значение Locale по умолчанию, которое не всегда является английским.
Если языковой стандарт не совпадает с входной строкой, то строковые данные, привязанные к языку, как у нас Mon или April, не будут распознаны и вызовут падение — java.text.ParseException, даже в том случае когда шаблон подходит.
Тем не менее, можно не указывать формат, если у нас используется шаблон, который не привязан к языку. Как пример — yyyy-MM-dd HH:mm:ss
-
Создаём дату с помощью форматтера, который в свою очередь парсит её из входной строки:
Вывод в консоль:
Хммм….Но формат-то уже не тот!
Чтобы сделать тот же формат, вновь используем форматтер:
Вывод в консоль:
Как отключить цифровое благополучие
Сейчас почти во всех последних сборках прошивок разработчики включают пункт «Цифровое благополучие и родительский контроль». Некоторым пользователям это приложение от Google вовсе не нужно, так как оно в фоновом режиме постоянно собирает данные об использовании Android, строит графики и расходует ресурсы устройства. Поэтому, если вы не используете Цифровое благополучие или не даете детям свой смартфон под «Родительским контролем», то эту опцию можно отключить.
- Заходим в системные настройки.
- Листаем до пункта «Цифровое благополучие», открываем его.
- В верхнем правом углу нажимаем по трем точкам.
- Выбираем пункт «Управление данными» — отключаем «Использование устройства за день» — закрыть доступ.
- В меню «Доступ к данным об использовании» выбираем «Цифровое благополучие» и отключаем его. Готово.
Как установить Moment.js:
Перед тем как работать с любой библиотекой, нужно её установить, Moment.js можно установить множеством способов, но я покажу только два.
Скачать файл:
Нажимаем на то что ниже, с надписью «momen.min.js», вы переходите по ссылки и должны увидеть это.
Что бы вам получить этот код, вам не надо весь его копировать, достаточно нажать Ctrl-S, выбрать куда скачать и подключить файл во ваш проект.
XHTML
1 | <script src=»libs/moment.min.js»></script> |
На этом установка закончена.
NPM:
Через npm совсем просто, вам надо только ввести этот код.
Python
1 | npm install moment—save |
То есть всё, но можно установить и через другие менеджеров пакетов, вот они все.
PowerShell
1 2 3 4 5 |
yarn add moment# Yarn Install-PackageMoment.js# NuGet spm install moment—save# spm meteor add momentjsmoment# meteor bower install moment—save# bower (deprecated) |
На этом с установкой всё.
Значения модального глагола Must
Модальный глагол must употребляется для выражения долженствования, запрета и предположения.
1. Долженствование, приказ, настойчивый совет
На практике зачастую трудно провести грань между долженствованием, приказом, настойчивым советом и просто советом. Но наиболее общее значение глагола must — долженствование. В этом значении must употребляется с глаголом в неопределенной форме.
Глагол must может относиться не только к настоящему, но и к будущему времени:
Для выражения долженствования, совета могут использоваться и другие средства, подробнее об этом читайте ниже.
2. Категорический запрет
Модальный глагол must в отрицательной форме обозначает категорический запрет, а не «не должен».
Более мягкие формы запрета — это can’t (особенно популярно в разговорной речи) и may not:
3. Предположение
С помощью must выражается уверенное предположение, которое говорящий считает правдоподобным. Предположение может относиться к настоящему и прошедшему времени
Обратите внимание, что для неуверенного предположения, которое говорящий не считает правдоподобным, используется глагол may / might
3.1 Предположение, относящееся к настоящему времени
Схема: must + инфинитив.
Особенно часто используется оборот с глаголом to be:
Если предполагается, что действие совершается в момент речи, используется глагол с окончанием -ing:
3.2 Предположение, относящееся к прошедшему времени
Схема: must + have + Past Participle.
Примечание: как выразить предположение, относящееся к будущему времени?
Глагол must не используется для выражения предположения, относящегося к будущему. Для этого можно использовать другие средства, например: probably, perhaps — вероятно, to be likely to (быть возможным, вероятным).
Также обратите внимание, что предположение с must не может быть построено в отрицательной форме. Для этого тоже используются другие слова