Что означает ### PSLOC в файлах локализации PSD1
В каждом почти каждом проекте Microsoft, использующем файлы локализации, есть текст ###PSLOC
до и после блока строк ресурсов. Вот пример:
ConvertFrom-StringData @'
###PSLOC
MyString=This is a string.
###PSLOC
'@
Вот пример из PowerShellGet репо.
Я не могу найти ссылку на это в любом из файлов справки. Я просмотрел about_Data_Sections, ConvertFrom-StringData и about_Script_Internationalization. И единственные экземпляры ###PSLOC
в
источник PowerShell находится в файлах ресурсов, как показано выше.
В частности, я хотел бы знать:
- Что это означает наличие или отсутствие сервера PowerShell.
- Предпочтительно также, где в источнике PowerShell обрабатывается
Ответы
Ответ 1
###PSLOC
используется внутренним инструментом локализации при создании Windows. Комментарий никак не связан с движком PowerShell.
Инструмент локализации расширяется для поддержки множества разных парсеров файлов для извлечения ресурсов для дальнейшей обработки локализации.
Расширение для PowerShell основано на ini файловом синтаксическом анализаторе, а комментарии используются для анализа анализатора при игнорировании строк. Это позволяет авторам файла psd1 смешивать надлежащую PowerShell и строки, в которых синтаксический анализатор ini не будет иметь проблем с.
Ответ 2
Я искал какое-то время и пришел к выводу, что ###PSLOC
является просто конвенцией и не имеет особого значения, хотя я не мог найти официальный документ.
Я нашел некоторые документы Microsoft, которые привели меня к такому выводу. Например: "Руководство по моделированию анализатора базовой линии Microsoft" показывает этот пример на стр. 20:
Пример файла содержимого
Ниже приведен пример файла содержимого модели Antivirus: Antivirus.psd1
# Only add new (name,value) pairs to the end of this table
# Do not remove, insert or re-arrange entries
ConvertFrom-StringData @'
###PSLOC start localizing
#
# helpID="ScanBootSector"
#
ScanBootSector_title = Boot Sector Scan (Indicator Setting {0})
ScanBootSector_problem = tbd: Problem for Constant name issue-1
ScanBootSector_impact = tbd: Impact for Constant name issue-1
ScanBootSector_resolution = tbd: Resolution for Constant name issue-1
ScanBootSector_compliant = tbd: Compliant for Constant name issue-1
#
# helpID="AutoUpdateStatus"
#
AutoUpdateStatus_title = Auto Update Status (Indicator Setting {0})
AutoUpdateStatus_problem = tbd: Problem for Constant name issue-2
AutoUpdateStatus_impact = tbd: Impact for Constant name issue-2
AutoUpdateStatus_resolution = tbd: Resolution for Constant name issue-2
AutoUpdateStatus_compliant = tbd: Compliant for Constant name issue-2
'@
Обратите внимание, что ###PSLOC
, за которым следует дополнительное описание и более простые комментарии, и закрытие ###PSLOC
отсутствует.
Книга "Pro PowerShell для разработчиков баз данных" Брайана П. Кафферки показана на с. 140 разделы ConvertFrom-StringData, которые не включают в себя ###PSLOC
блоки/теги вообще.
Другая подсказка исходит из моей собственной системы Windows 10.
Я grepped все *.psd1 файлы и узнал, что у некоторых нет надлежащего закрытия ###PSLOC
-block/tag, но ###PSCLOCC
insead, например. c:\windows\WinSxS\amd64_microsoft-windows-pnpdevice-powershell_31bf3856ad364e35_10.0.15063.0_none_e99b05a055a1e6c4\PnpDevice.Resource.psd1 (это также может быть ошибкой).
Наконец, я искал репозиторий Powershell (core), но не смог найти никакого лечения для ###PSLOC
.
Итак, случай не на 100% ясен. Но, возможно, я нашел несколько убедительных доказательств того, что это не имеет особого значения.