
Макс
14.07.2016
09:45:54
походу, я уже этим и занимаюсь. к сожалению(

Mike
14.07.2016
09:46:46
напиши под себя, как тебе надо и ок

Макс
14.07.2016
09:47:16
насчёт того что логика деления на «1/2/5 юзеров» у разных языков своя и не факт что очень декларативная — это понятно, видимо, придётся всё равно встраивать в языковой конфиг какую-то Lua ради этого.
ну, либо плюнуть и запихать оба файла перевода в исходники, чтобы компилировались. чай, не такой уж у меня и нужный другим проект

Google

Oleg
14.07.2016
09:49:39
а можно поиздеваться над русским немного
вместо
1 пользователь
2 пользователя
писать
количество пользователей: 1,2, N
зато не будет проблемы со сколнениями

Макс
14.07.2016
09:51:11
пусть будут, например, функции вроде таких:
assert(_!"X users"(1) == "1 юзер");
assert(_!"X users"(2) == "2 юзера");
assert(_!"X users"(5) == "5 юзеров");
assert(_!"hello world" == "Привет мир, я фраза без аргументов");
Кто что скажет на счёт такого API? Дишненько?

Oleg
14.07.2016
09:55:11
мне нравится


Макс
14.07.2016
09:56:07
попробую. если что получится — отпишусь)
Хорошо, другой вопрос.
Nested classes каким-то образом наследуются? А то я хотел бы наделать типа-неймспейсов в классе:
abstract class Language {
class errors {
string http_500 = "Internal Server Error";
}
// ...
}
class RussianLanguage: Language {
// ?
}
#!/usr/bin/rdmd
import std.stdio;
abstract class Language {
class errors {
static string http_500 = "Internal Server Error";
}
}
/// Хороший перевод, все строки на месте
class GoodRussian: Language {
class errors {
static string http_500 = "Внутренняя ошибка сервера";
}
}
/// Плохой перевод, нет целого раздела errors
class BadRussian: Language {
}
/// Средненький перевод, раздел есть, но в нём нет нужной строки
class MiddleRussian: Language {
class errors {
}
}
void main() {
auto ru = new GoodRussian();
assert(ru.errors.http_500 == "Внутренняя ошибка сервера");
auto ru2 = new BadRussian();
assert(ru2.errors.http_500 == "Internal Server Error");
auto ru3 = new MiddleRussian();
auto s = ru3.errors.http_500; // ошибка компиляции :(
}
Я думаю, можно замутить что-то с помощью opDispatch() и ручного обхода вверх по своей иерархии.
я сошёл с ума?


Pavel
14.07.2016
10:21:15
выглядит странно

Макс
14.07.2016
10:21:44
но без nested classes будет месиво из слишком многих строк, переводить неудобно :(

Google

Макс
14.07.2016
10:21:56
прям хочется разбить по темам
есть ещё варианты? чтобы менее странные
ну, кроме
class Language {
static string errors__http_500 = "Internal Server Error";
}

Oleg
14.07.2016
10:35:09
Ребят
тут такая идея появилась
сделать либу, которая будет морфологически правильно формировать русский текст
начать с чисел пока
есть маленький набросок архитектуры
кому интересно?
это можно интегрировать в интернационализацию
просто мы её точно будем делать по работе

Eto
14.07.2016
10:36:33
Интересно. Что и как делать будет?

Oleg
14.07.2016
10:36:43
если тут будут заинтересованные люди, которые захотят помочь делом, то это будет opensource

Макс
14.07.2016
10:36:53
а что такое «морфологически правильно» в широком смысле? склонять научите?

Oleg
14.07.2016
10:36:59
да
например правильно выстраивать фразы типа "нехватает десяти кирпичей"
а не "нехватает 10 кирпич(ей)"
блин... "не хватает" раздельно, да?))
для меня это будет большой челандж

Макс
14.07.2016
10:57:53

Google

Pavel
14.07.2016
10:59:49
https://github.com/petrovich

Oleg
14.07.2016
11:02:55
"для склонения русских имён, фамилий и отчеств по падежам"
а как же остальное всё?

Pavel
14.07.2016
11:04:03
Ну, хотя бы начать с этого
Остальное все - не уверен что это решаемая задача

Oleg
14.07.2016
11:04:24
да ну...
решаемая конечно
числа точно решаемая
а это самая распостранённая проблема, как мне кажется

Pavel
14.07.2016
11:05:02
Ну, в частных случаях да.
в пхп фреймворках есть такой вариант плейсхолдера:
i18n("{n} кирпич|{n} кирпича|{n} кирпичей", 42)

Макс
14.07.2016
11:07:02
библиотеки для формирования чисел прописью («одна тысяча триста пятьдесят два кирпича ноль ноль копеек») существуют для других языков, не вижу ничего нерешаемого тут

Pavel
14.07.2016
11:07:21
Строка разбивается по |, далее берется нужная часть в завимисоти от второго параметра.
сделать либу, которая будет морфологически правильно формировать русский текст

Макс
14.07.2016
11:08:01

Мерлин
14.07.2016
11:08:24

Pavel
14.07.2016
11:08:52
Вот это утверждение крайне смелое :) Для частных задач можно решения придумать, пожалуйста. Но чтобы прям морфологически формировался вообще любой текст - это имхо фантастика
Ну то есть не костыли, а просто легкая автоматизация очень сложной задачи.

Google

Макс
14.07.2016
11:12:09
я вот не уверен, что там в других языках. вдруг получится так, что усложнение есть, а покрытия нужных ситуаций нет. что в каком-нибудь языке нужно будет условие «делится ли на три, при том что не более тридцати»

Oleg
14.07.2016
11:14:08
русский, английский (украинский, возможно)
ну белорусский
но они (кроме английского) очень похожи и правила схожи
так что базис думаю один может быть

Макс
14.07.2016
11:15:06
ну я вот в розовых мечтах мир захватываю

Oleg
14.07.2016
11:15:07
в итоге получается 2

Admin
ERROR: S client not available

Макс
14.07.2016
11:16:07
но согласен, всего не учтёшь. если избран путь с некомпилируемым декларативным конфигом, то да, нужно упрощать.

Oleg
14.07.2016
11:16:14
мне нужно будет формировать автоматически текст, следовательно такая либа мне и моим колегам нужна
в каком она будет виде и как покрывать все случаи это уже третий вопрос
вопрос в том кому здесь ещё она может быть нужна?

Pavel
14.07.2016
11:17:04

Макс
14.07.2016
11:17:17
не понял вопроса

Pavel
14.07.2016
11:17:43
Здесь {n,plural,=0{котов нет} =1{есть один кот} one{# кот} few{# кота} many{# котов} other{# кота}}!
Я имею в виду вот тут строка написана специфично для русского, она абсолютно корректна. Если при интернационализции ты задаешь такие правила для каждого языка, то получается все случаи рассмотрены.

Макс
14.07.2016
11:18:50
В английском варианта два, и они определяются через условие n==1.
В русском вариантов три, и они определяются через более сложное условие, в котором будет и что-то типа n%10 == 5, и ещё разные проверки.
В другом языке может оказаться другой набор вариантов и другой способ выбора варианта.
few и many как здесь делятся?

Google

Макс
14.07.2016
11:19:41
у меня вот самодельный хардкод был такой
string russianGenitive(T)(T n, in string one, in string two, in string five=null) if (isIntegral!T) {
if (5 <= n && n <= 20)
return five ? five : two;
else {
n = n % 10;
if (n == 1)
return one;
else if (n == 2 || n == 3 || n == 4)
return two;
else
return five ? five : two;
}
}
конфиг такого не сможет, это должен уметь код

Pavel
14.07.2016
11:26:17
few и many как здесь делятся?
Это сам разработчик решает когда зашивает в строке шаблон. Ведь в зависимости от ситуации few это разное количество.

Макс
14.07.2016
11:27:44
тогда это как-то не про то, по-моему. в зависимости 1/2/5 нужна разная форма, это, по-моему, довольно универсальное правило

Dmitry
14.07.2016
12:10:44
Дык был же модуль грамматики Фомского
вроде бы она именно для этого
чтобы велосипеды не городить
на ней кажется парсеры языка базируются существующие

Pavel
14.07.2016
12:17:29
Ты случайно не путаешь с грамматиками Хомского? )

Dmitry
14.07.2016
12:18:42
Ой да, точно

Oleg
14.07.2016
20:44:49
http://morpher.ru/Demo.aspx чел продаёт такое дело

Dmitry
15.07.2016
10:04:45
Ребят, подскажите, как запрос сформулировать гуглу на инглише. Задача найти растры которые попадают под зону выделениям полигоном.
Я разные варианты попробовал с overlapped и что-то все мимо

Макс
16.07.2016
04:15:27
Как вы думаете, чтобы в конфиге-переводе задавать разные формы числительных, достаточно ли будет простых регулярок, чтобы различать числа? По типу такого:
^.*1$ – "%s котёнок"
^.*[^1](2|3|4)$ – "%s котёнка"
^.*(0|1.)$ – "%s котят"
Или тут недостаточная выразительность получится?
В смысле, будут ли потом языки, для которых этого не хватит? Для русского вроде хватает, для английского и подавно, а больше я никаких не знаю. :-/

Dmitry
16.07.2016
08:03:58
А ты контекстно независимую грамматику не смотрел? Как оно будет выглядеть там мне интересно

Макс
16.07.2016
08:52:31

Pavel
16.07.2016
09:07:22

Макс
16.07.2016
09:09:47
Понятно, что другой. Вопрос, для всех ли языков это можно будет вообще описать регулярками?

Pavel
16.07.2016
09:14:16
Ты регулярками описываешь цифры а не словоформы, так что не очень имеет смысл вопрос
Короче это надо у лингвистов спрашивать