Sometimes, using English in coding is utterly impossible. For example, when working on a medical app, there’s no way I can translate special terms to English just so I can work with an all-English model. Funnily enough, the design process does not suffer that much. For example, my abstracted Patient entity looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<table name="Пациент" script="•script.xml">
  <field name="ИндексЛечащегоВрача" type="int" filter="true"/>
  <field name="Фамилия" type="string" size="32" null="false" />
  <field name="Имя" type="string" size="32" null="false" />
  <field name="Отчество" type="string" size="32" null="false" />
  <field name="ПолЖенский" type="bool" null="false" text="Пол"
         radio="true" option1="Мужской" option2="Женский"/>
  <field name="Адрес" type="string" size="128"/>
  <field name="Телефон" type="string" size="16"/>
  <field name="ДатаРождения" type="datetime"/>
  <field name="МестоРаботы" type="string" size="64"/>
  <field name="Профессия" type="string" size="64"/>
  <field name="Страховка" type="string" size="256"/>
</table>

This works so long as I keep everything in UTF-8 perpetually. Of course, I also had to alter CodeGenUtils to handle UTF-8 but, end result it that I can manufacture Latin-Cyrillic sprocs from the model:

/* Creates the 'Пациент' table. */
create procedure [dbo].[ПациентCreate] as
create table [dbo].[Пациент] (
  [Индекс] int identity primary key not null,
  [ИндексЛечащегоВрача] int,
  [Фамилия] nvarchar(32) not null,
  [Имя] nvarchar(32) not null,
  [Отчество] nvarchar(32) not null,
  [ПолЖенский] bit not null,
  [Адрес] nvarchar(128),
  [Телефон] nvarchar(16),
  [ДатаРождения] datetime,
  [МестоРаботы] nvarchar(64),
  [Профессия] nvarchar(64),
  [Страховка] nvarchar(256)
);
return @@error
go

SQL Server supports Unicode names, so there’s really no problem. Firing off this stored procedure (once you get over Visual Studio’s bugs) is easy and, predictably, gets you the structure you want. Now, an ORM like the Entity Framework can grab the (cyrillic) tables easily. It won’t be able to rename tables of course, but still, it works:

Doctor-Patient Model

This is where things get tricky. Entity Framework has a bunch of inherent bugs where it expects Latin key names. However, for the most part, things work well enough. For example, binding works against Cyrillic identifiers just fine:

<StackPanel Orientation="Horizontal">
  <Label Content="Пол:"  />
  <RadioButton Content="Мужской" 
    IsChecked="{Binding Path=ПолЖенский, Converter={StaticResource ic} }"/>
  <RadioButton Content="Женский" IsChecked="{Binding Path=ПолЖенский}"/>
</StackPanel>

The above code is, interestingly enough, auto-generated from the model. Thanks to WPF’s WrapPanel, making groups of controls has never been easier: