-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Localize the duration in sponsor section #136
Conversation
✅ Deploy Preview for vuefes-2024 ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
:start="{ | ||
prefixYear: $t('sponsor.prefixYear'), | ||
date: $t('sponsor.start_date'), | ||
dayOfWeek: $t('sponsor.day_of_week.monday'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$t
には key が見つからなかった場合に引数にデフォルトメッセージをしていすれば、そのデフォルトメッセージで解決するので、それを利用すると en 側のリソースに空文字を指定する必要がない気がする。
https://vue-i18n.intlify.dev/api/injection.html#t-key-defaultmsg
dayOfWeek: $t('sponsor.day_of_week.monday'), | |
dayOfWeek: $t('sponsor.day_of_week.monday', ''), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kazupon
デフォルトメッセージの指定、空文字だと挙動としてkeyを返却するようです。
dayOfWeek: $t('sponsor.day_of_week.monday', ''),
期待結果: ''
結果:'sponsor.day_of_week.monday'
dayOfWeek: $t('sponsor.day_of_week.monday', 'x'),
期待結果: 'x'
結果:'x'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あ、ホントですね。すいません、これ vue-i18n のデフォルトメッセージのエッジケースなバグっぽいですね...
あとは、
useI18n
が露出するlocale
を使ってen
のときは空文字を与えるuseI18n
が露出するte
を使ってsponsor.day_of_week.monday
key が vue-i18n で有効になっているlocale ないときは、空文字を与える
SponsorPageSection.vue
内部で workaround 的に対応する感じですかね...
あとは現状のまま行くか。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2 の方法で空文字を与えるよう修正しました。
vuefes-2024/apps/web/app/components/SponsorPageSection.vue
Lines 11 to 32 in 426ef4d
const { t, te } = useI18n() | |
const { locale } = useLocaleCurrent() | |
/** | |
* Get translation or return empty string | |
* @param key - translation key | |
* @returns translation or empty string | |
*/ | |
function getTranslationOrDefault(key: string): string { | |
return te(key, locale.value) ? t(key) : '' | |
} | |
const periodStart = { | |
prefixYear: t('prefix_year'), | |
date: t('start_date'), | |
dayOfWeek: getTranslationOrDefault('day_of_week.monday'), | |
} | |
const periodEnd = { | |
suffixYear: t('suffix_year'), | |
date: t('end_date'), | |
dayOfWeek: getTranslationOrDefault('day_of_week.thursday'), | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あ、ホントですね。すいません、これ vue-i18n のデフォルトメッセージのエッジケースなバグっぽいですね...
ちなみに、これは vue-i18n v10 で直しておきました。
intlify/vue-i18n#1849
(nuxt i18n にはまだ取り込めていない。)
📝 lang/ のリソース定義、スネークケースに統一する |
|
||
const { t, te } = useI18n() | ||
const { locale } = useLocaleCurrent() | ||
/** | ||
* Get translation or return empty string | ||
* @param key - translation key | ||
* @returns translation or empty string | ||
*/ | ||
function getTranslationOrDefault(key: string): string { | ||
return te(key, locale.value) ? t(key) : '' | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jiyuujin @toshick @ryuhei373
[Ask]
この部分、tsファイルで管理した方が汎用性あると思いつつ
本プロジェクトでどのディレクトリで管理すべきか判断つかなかったのでコンポーネントに直接実装しています。
外出しする場合、どのディレクトリで管理するのが良いでしょうか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
外出しする場合、どのディレクトリで管理するのが良いでしょうか?
apps/web/app/composables で良いかと思います
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getTranslationOrDefault
ではなく composable なので、useTranslation
にしておくとよいかと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
翌朝10:00よりスポンサー公募第二弾が開始する予定なので、
いったんマージしますね mm
後ほどリファクタリングを進めていただければ(急ぎませんので mm
Issue
https://github.com/vuejs-jp/vuefes-2024-backside/issues/151
Details of the changes
Screenshots
Before
After
Storybook
確認用URL Chromatic