Может ли язык домена (DSL) быть локализован (т.е. переведен)?
Я никогда не писал DSL, но я рассматриваю его как функцию для нового проекта (гипотетического). Для конечных пользователей будет возможность выразить на естественном языке такие понятия, как будни между 10 и 11, за исключением первого понедельника месяца.
Голландские пользователи могут написать weekdagen tussen 10 en 11 behalve op de eerste maandag van de maand. В этом случае положение слов кажется совпадающим, но могут быть выражения, в которых положение глаголов / существительных и т. Д. Может быть различным в разных языках.
Я понимаю очевидный ответ (это зависит). Я разработчик.NET, и я думаю об использовании Boo, но я открыт для предложений. Мне нужно понять, требует ли каждый перевод переписывания части реализации (какой части) или есть ли способ сделать реальные переводы, возможно, в каком-то виде препроцессора.
2 ответа
Вы не найдете переводчика, способного сделать это более чем на нескольких языках (скажем, между одним или двумя языками и английским), особенно если учесть английский, который сам может иметь как минимум 3 способа написания.
Если вы хотите написать DSL, вам нужно сначала придумать правила производства (что вы можете написать), а затем проработать их так, чтобы выразить это на английском / голландском / марсианском / и т.д.
Например: Расписание:= Включение кадра [Исключение]
который будет:
- Кадр: месяц, год, неделя, выходные дни, выходные дни, дни месяца, праздники и т. Д.
- Включение: между, а не внутри, вокруг, содержащие и т. Д.
- Исключение: кроме [Расписание], но не [Расписание], если только [Расписание]
Затем вы можете позаботиться о лексере / парсере, который исправляет конкретную грамматику и помещает ее в эту форму производства.
Они находятся на моей голове и даже не близко, но должно быть достаточно, чтобы начать.
DSL, созданный с помощью инструментальных средств для конкретного домена, может быть локализован. Они помещают все строки в файлы.resx.