English 中文(简体)
Can a Domain Specific Language (DSL) be localized (i.e. translated)?
原标题:

I have never written a DSL, but I am considering it as a feature for a new project (hypothetical). It would be for end users to be able to express in natural language concepts such as weekdays between 10 and 11 except on the first monday of the month.

Dutch users might write weekdagen tussen 10 en 11 behalve op de eerste maandag van de maand. In this case the position of the words seems to match, but there may be expressions where the position of verbs/nouns etc. could be different between languages.

I realise the obvious answer (it depends). I am a .NET developer and I consider using Boo but I m open to suggestions. I need to understand wether each translation requires rewriting a part of the implementation (which part) or if there is a way to do actual translations, maybe in some sort of preprocessor.

最佳回答

Your not going to find a translator that is capable of doing this for more than a few languages (say between one or two languages and English), especially considering English which itself could have at least 3 ways to write it.

If you want to write a DSL, you need to come up with the production rules first (what can you write) and then work it into a way to express it in english/dutch/martian/etc.

For instance: Schedule := Frame Inclusion [Exception]

which would be:

  • Frame: Month, Year, Week, WeekDays, WeekEnds, Days of the Month, Holidays, etc
  • Inclusion: Between, Not In, Around, Containing, etc
  • Exception: Except [Schedule], But Not [Schedule], Unless [Schedule]

You can then worry about a lexer/parser which corrects a specific grammar and puts it into that form of productions.

These are off the top of my head and not even close, but should be enough to get started.

问题回答

A DSL created with the Domain-Specific Language Tools can be localized. They place all strings into .resx files.





相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签