Skip to content

Instantly share code, notes, and snippets.

@AlexxIT
Created May 7, 2019 09:14
Show Gist options
  • Save AlexxIT/9235d8992cb38baa1ea74870f550baea to your computer and use it in GitHub Desktop.
Save AlexxIT/9235d8992cb38baa1ea74870f550baea to your computer and use it in GitHub Desktop.
from fluent.runtime import FluentBundle
def equal(val1, val2):
if isinstance(val1, str) and isinstance(val2, str):
return val1.lower() == val2.lower()
return val1 == val2
bundle = FluentBundle(['ru'], use_isolating=False,
functions={'EQUAL': equal})
bundle.add_messages("""
weather = Сейчас {$facttemp}{
EQUAL($facttemp, $feeltemp) ->
*[1] {""}
[0] , ощущуется как {$feeltemp}
}. {$factcond}. {$forecast}.{
EQUAL($factcond, $maxcond) ->
[0] {" "}До конца дня ожидается {$maxcond}{
EQUAL($facttemp, $maxtemp) ->
*[1] .
[0] {" "}и температура {$maxtemp}.
}
*[1] {
EQUAL($facttemp, $maxtemp) ->
*[1] {""}
[0] {" "}До конца дня ожидается температура {$maxtemp}.
}
}
""")
translated, _ = bundle.format('weather', {
'facttemp': '+21',
'feeltemp': '+19',
'factcond': 'Ясно',
'forecast': "В ближайшие два часа осадков не ожидается",
'maxcond': "небольшой дождь",
'maxtemp': '+25'
})
print(translated)
# Сейчас +21. Ясно. В ближайшие два часа осадков не ожидается. До конца дня
# ожидается небольшой дождь и температура +25.
def as_text(facttemp, feeltemp, factcond, forecast, maxtemp, maxcond):
s = f"Сейчас {facttemp}"
if facttemp != feeltemp:
s += f", ощущается как {feeltemp}"
s += f". {factcond}. {forecast}."
if maxcond and factcond.lower() != maxcond and facttemp != maxtemp:
s += f" До конца дня ожидается {maxcond} и температура {maxtemp}."
elif maxcond and factcond.lower() != maxcond:
s += f" До конца дня ожидается {maxcond}."
elif facttemp != maxtemp:
s += f" До конца дня ожидается температура {maxtemp}."
return s
print(as_text(**{
'facttemp': '+21',
'feeltemp': '+19',
'factcond': 'Ясно',
'forecast': "В ближайшие два часа осадков не ожидается",
'maxcond': "небольшой дождь",
'maxtemp': '+25'
}))
# Сейчас +21, ощущается как +19. Ясно. В ближайшие два часа осадков не 
# ожидается. До конца дня ожидается небольшой дождь и температура +25.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment