Support proper i18n pluralization #3440
Open
opened 2020-01-03 22:31:07 +01:00 by kauffj
·
8 comments
No Branch/Tag specified
master
dependabot/npm_and_yarn/electron-22.3.21
dependabot/npm_and_yarn/semver-5.7.2
7681-remove-block-list-apis
new-sync-demo-no-user
commentserver-swap-test-2
Comment-server-swap
7683-upgrade-to-electron-20
7668-improve-startup-performance-while-fetching-comment-moderation-info
feat-exportWalletSync
feat-walletExport
new-sync-demo
test-updates4b
test-updates-4a
update-test-3c
update-test-3b
update-test-3
test7495b2
test7495a2
test7495b
test7495
test109
test-sdk-109
feat-restoreLocalNotifications
test-gatekeeper
test-107
test-mac-notarize
update-postcss-quagmire
testpush
commentApiDefault
inspect-upgrades
fix-unblockIsChannelClaim
ody255
robd-mac-2
sso-demo
robd-universal
remove-swap
cleaning.dec.21
update-trending-param
collection-ordering
download-progress
anton
anthony-fix-video-ios
saltdev
bump-electron-to-11
fix-noBlockSubmitOnImgError
x.lint.extras
x.final
somehow-working
reenable-ads
issue/7152
chat-markdown
ip/muted.uris
odysee-split
feat-desktopRelated
ip/memo
bs
ip/memoization
bump-flow-version
ip/shared.block.list
keycloak-sso
a-r-w-k-2
auth-refactor-w-keycloak
auth-refactor
rb-ip/embed-replay
issue/2120
oidc
fix-videojs-ios
fiat-tip-improvements
test-tom-1
fix-videojs-issues
fix-persistSupportOption
ctrl-txt
add-play-button-on-pause-ios
mobile-ui-bugfix-for-preview-images
fix-livestream-claim-type
playback-controls-2
copy-list
feat-collection-background-publishing
ip/repost.in.homepage
wallet-iteration-2
broken-ads-branch
move-stripe-transactions-to-wallet-fix
lint.autoformat
jessop-stripe
move-transactions
stripe-move-transactions-to-wallet
mater
more-stripe-integration
more-stripe-integration1
desktop-redirect
rss-test
fixed-collectionEdit
watchman-plugin-odysee-anthony
grin
watchman-plugin-odysee
protocol
salt_saved_list
salt-saved_list
watchman-plugin
more-stripe-integration2
salt-savedList
salt/mobile-comments
chromecast-test2
odysee
wpe-on-ody
bring-back-subtitles-button
merge-to-odysee
bugfix-tip-error
popup-fix
favi-cherry
searchDefaults
pin-from-homepages-master
ody-7-22-c
ody-7-22-b
ody-7-22
ody-7-21
cherry.pick.thumbs.fix
ody-rb-7-20c
test-chromecast
ody-7-20-rb
odysee-cnsearch
ody-7-19-b
anthony-odysee
drewhancock-patch-2
horizon-server
feat-nicer-outages
tech-debt/selectors-search
fix-lbry-tv-thumbnails
drewhancock-patch-1
jbnrecsys
feat/disableListEditPending
testapi
bump-lightouse-throttle
popup
replays-rebased-tom
pre-reoll-ads-rebase
julianchandra-patch-1
feat/better-chat
revert-livestream
feat/code-splitting
feat/go-live-forms
UI/drop-down-menu-animation
faster-builds
v0.53.9
v0.53.8
v0.53.8-alpha.1
v0.53.7
v0.53.7-alpha.1
v0.53.6
v0.53.6-alpha.1
v0.53.5
v0.53.5-alpha.test7495b4
v0.53.5-alpha.test7495a4
"v0.53.5-alpha.test7495a4"
"v0.53.5-alpha.test7495c3"
v0.53.5-alpha.test7495b3
v0.53.5-alpha.test7495a3
v0.53.5-alpha.test7495b2
v0.53.5-alpha.test7495a2
v0.53.5-alpha.test7495b
v0.53.5-alpha.test7495a
v0.53.5-t109
v0.53.5-test109
v0.53.4
v0.53.4-alpha.8
v0.53.4-alpha.7
v0.53.4-alpha.6
v0.53.4-alpha.5
v0.53.4-alpha.4
v0.53.4-alpha.3
v0.53.4-alpha.2
v0.53.4-alpha.1
v0.53.3
v0.53.2-alpha.1
v0.53.2
0.53.2-alpha.1
v0.53.1
v0.53.0-alpha.6
v0.53.0-alpha.1
v0.53.0-alpha.0
v0.52.6-alpha.teststyles.3
v0.52.6-alpha.teststyles.2
v0.52.6-alpha.teststyles.1
newstyles3
newstyletag
newstyle
v0.52.6
v0.52.6-alpha.8
v0.52.7-alpha.test.107
v0.52.6-alpha.7
v0.52.6-alpha.6
v0.52.6-alpha.5
v0.52.6-alpha.4
v0.52.6-alpha.3
v0.52.6-alpha.2
v0.52.6-alpha.1
v0.52.5
v0.52.5-alpha.2
v0.52.5-alpha.1
v0.52.4
v0.52.3
v0.52.2
v0.52.2-alpha.5
v0.52.2-alpha.4
v0.52.2-alpha.3
v0.52.2-alpha.2
v0.52.2-alpha.1
v0.52.1-alpha.5
v0.52.1-alpha.4
v0.52.1-alpha.3
v0.52.1-alpha.2
v0.52.0
v0.52.0-alpha.13
v0.52.0-alpha.12
v0.52.0-alpha.11
v0.52.0-alpha.10
v0.52.0-alpha.9
v0.52.0-rc.8.3
v0.52.0-rc.8
v0.52.0-rc.7
v0.52.0-rc.6
v0.52.0-rc.5
v0.52.0-rc.4
v0.52.0-rc.3
v0.52.0-rc.2.1
v0.52.0-rc.2
v0.52.0-rc.1
v0.51.2
v0.51.2-rc.4
v0.51.2-rc.3
v0.51.2-rc.2
v0.51.2-rc.1
v0.51.1
v0.51.0
v0.51.0-rc.3
v0.51.0-rc.2
v0.51.0-rc.1
v0.50.3-rc.3
v0.50.3-rc.2
v0.50.3-rc.1
v0.50.2
v0.50.2-rc.1
v0.50.1
v0.50.1-rc.1
v0.50.0
v0.50.0-rc.3
v0.50.0-rc.2
v0.50.0-rc.1
v0.49.5
v0.49.5-rc.1
v0.49.4
v0.49.4-rc.5
v0.49.4-rc.4
v0.49.4-rc.3
v0.49.4-rc.2
v0.49.3
v0.49.3-rc.2
v0.49.3-rc.1
v0.49.2
v0.49.2-rc.7
v0.49.2-rc.6
v0.49.2-rc.5
v0.49.1-rc.5
v0.49.1-rc.4
v0.49.2-rc.3
v0.49.2-rc.2
v0.49.2-rc.1
v0.49.1
v0.49.1-rc.1
v0.49.0
v0.49.0-rc.16
v0.49.0-rc.15
v0.49.0-rc.14
v0.49.0-rc.13
v0.49.0-rc.12
v0.49.0-rc.11
v0.49.0-rc.10
v0.49.0-rc.9
v0.49.0-rc.8
v0.49.0-rc.7
v0.49.0-rc.6
v0.49.0-rc.5
v0.49.0-rc.4
v0.49.0-rc.3
v0.49.0-rc.2
v0.49.0-rc.1
v0.48.2
v0.48.2-rc.4
v0.48.2-rc.3
v0.48.2-rc.2
v0.48.2-rc.1
v0.48.1
v0.48.1-rc.5
v0.48.1-rc.4
v0.48.1-rc.3
v0.48.1-rc.2
v0.48.1-rc.1
v0.48.0
v0.48.0-rc.3
v0.48.0-rc.2
v0.48.0-rc.1
v0.47.2
v0.47.2-rc.3
v0.47.2-rc.2
v0.47.2-rc.1
v0.47.1
v0.47.1-rc.5
v0.47.1-rc.4
v0.47.1-rc.3
v0.47.1-rc.2
v0.47.1-rc.1
v0.47.0
v0.47.0-rc.7
v0.47.0-rc.6
v0.47.0-rc.5
v0.47.0-rc.4
v0.47.0-rc.3
v0.47.0-rc.2
v0.47.0-rc.1
v0.46.4-rc.2
v0.46.4-rc.1
v0.46.3
v0.46.2
v0.46.2-rc.2
v0.46.2-rc.1
v0.46.1
v0.46.1-rc.1
v0.46.0
v0.46.0-rc.13
v0.46.0-rc.12
v0.46.0-rc.11
v0.46.0-rc.10
v0.46.0-rc.9
v0.46.0-rc.8
v0.46.0-rc.7
v0.46.0-rc.6
v0.46.0-rc.5
v0.46.0-rc.4
v0.46.0-rc.3
v0.46.0-rc.2
v0.46.0-rc.1
v0.45.2
v0.45.2-rc.1
v0.45.1
v0.45.1-rc.11
v0.45.1-rc.10
v0.45.1-rc.9
v0.45.1-rc.8
v0.45.1-rc.7
v0.45.1-rc.6
v0.45.1-rc.5
v0.45.1-rc.4
v0.45.1-rc.3
v0.45.1-rc.2
v0.45.1-rc.1
v0.45.0
v0.45.0-rc.11
v0.45.0-rc.10
v0.45.0-rc.9
v0.45.0-rc.8
v0.45.0-rc.7
v0.45.0-rc.6
v0.45.0-rc.5
v0.45.0-rc.4
v0.45.0-rc.3
v0.45.0-rc.2
v0.45.0-rc.1
v0.44.1-rc.3
v0.44.1-rc.2
v0.44.1-rc.1
v0.44.0
v0.44.0-rc.6
v0.44.0-rc.5
v0.44.0-rc.4
v0.44.0-rc.3
v0.44.0-rc.2
v0.44.0-rc.1
v0.43.4
v0.43.4-rc.3
v0.43.4-rc.2
v0.43.4-rc.1
v0.43.3
v0.43.3-rc.4
v0.43.3-rc.3
v0.43.3-rc.2
v0.43.3-rc.1
v0.43.2
v0.43.2-rc.2
v0.43.2-rc.1
v0.43.1
v0.43.1-rc.1
v0.43.0
v0.43.0-rc.9
v0.43.0-rc.8
v0.43.0-rc.7
v0.43.0-rc.6
v0.43.0-rc.5
v0.43.0-rc.4
v0.43.0-rc.3
v0.43.0-rc.2
v0.43.0-rc.1
v0.42.0
v0.42.0-rc.7
v0.42.0-rc.6
v0.42.0-rc.5
v0.42.0-rc.4
v0.42.0-rc.3
v0.42.0-rc.2
v0.42.0-rc.1
v0.41.0
v0.41.0-rc.8
v0.41.0-rc.7
v0.41.0-rc.6
v0.41.0-rc.5
v0.41.0-rc.4
v0.41.0-rc.3
v0.41.0-rc.2
v0.41.0-rc.1
v0.40.0
v0.39.1
v0.39.1-rc.4
v0.39.1-rc.3
v0.39.1-rc.2
v0.39.1-rc.1
v0.39.0
v0.39.0-rc.14
v0.39.0-rc.13
v0.39.0-rc.12
v0.39.0-rc.11
v0.39.0-rc.10
v0.39.0-rc.9
v0.39.0-rc.8
v0.39.0-rc.7
v0.39.0-rc.6
v0.39.0-rc.5
v0.39.0-rc.4
v0.39.0-rc.3
v0.39.0-rc.2
v0.39.0-rc.1
v0.38.2
v0.38.2-rc.2
v0.38.2-rc.1
v0.38.1
v0.38.1-rc.3
v0.38.1-rc.2
v0.38.1-rc.1
v0.38.0
v0.38.0-rc.5
v0.38.0-rc.4
v0.38.0-rc.3
v0.38.0-rc.2
v0.38.0-rc.1
v0.37.2
v0.37.2-rc.6
v0.37.2-rc.5
v0.37.2-rc.4
v0.37.2-rc.3
v0.37.2-rc.2
v0.37.2-rc.1
v0.37.1
v0.37.1-rc.4
v0.37.1-rc.3
v0.37.1-rc.2
v0.37.1-rc.1
v0.37.0
v0.37.0-rc.8
v0.37.0-rc.7
v0.37.0-rc.6
v0.37.0-rc.5
v0.37.0-rc.4
v0.37.0-rc.3
v0.37.0-rc.2
v0.37.0-rc.1
v0.36.1
v0.36.1-rc.2
v0.36.1-rc.1
v0.36.0
v0.36.0-rc.7
v0.36.0-rc.6
v0.36.0-rc.5
v0.36.0-rc.4
v0.36.0-rc.3
v0.36.0-rc.2
v0.36.0-rc.1
v0.35.7
v0.35.7-rc.1
v0.35.6
v0.35.6-rc.1
v0.35.5
v0.35.5-rc.2
v0.35.5-rc.1
v0.35.4
v0.35.4-rc.7
v0.35.4-rc.6
v0.35.4-rc.5
v0.35.4-rc.4
v0.35.4-rc.3
v0.35.4-rc.2
v0.35.4-rc.1
v0.35.3
v0.35.3-rc.4
v0.35.3-rc.3
v0.35.3-rc.2
v0.35.3-rc.1
v0.35.2
v0.35.2-rc.12
v0.35.2-rc.11
v0.35.2-rc.10
v0.35.2-rc.9
v0.35.2-rc.8
v0.35.2-rc.7
v0.35.2-rc.6
v0.35.2-rc.5
v0.35.2-rc.4
v0.35.2-rc.3
v0.35.2-rc.2
v0.35.2-rc.1
v0.35.1
v0.35.1-rc.1
v0.35.0
v0.35.0-rc.4
v0.35.0-rc.3
v0.35.0-rc.2
v0.35.0-rc.1
v0.34.1-rc.5
v0.34.1-rc.4
v0.34.2
v0.34.1
v0.34.1-rc.2
v0.34.1-rc.1
v0.34.0
v0.34.0-rc.19
v0.34.0-rc.18
v0.34.0-rc.17
v0.34.0-rc.16
v0.34.0-rc.15
v0.34.0-rc.14
v0.34.0-rc.13
v0.34.0-rc.12
v0.34.0-rc.11
v0.34.0-rc.10
v0.34.0-rc.9
v0.33.3-rc.1
v0.34.0-rc.8
v0.34.0-rc.7
v0.34.0-rc.6
v0.34.0-rc.5
v0.34.0-rc.4
v0.34.0-rc.3
v0.34.0-rc.2
v0.34.0-rc.1
v0.33.2
v0.33.1
v0.33.0
v0.33.0-rc.4
v0.33.0-rc.3
v0.33.0-rc.2
v0.33.0-rc.1
v0.32.2
v0.32.2-rc.2
v0.32.2-rc.1
v0.32.1
v0.32.1-rc.1
v0.32.0
v0.32.0-rc.6
v0.32.0-rc.5
v0.32.0-rc.4
v0.32.0-rc.3
v0.32.0-rc.2
v0.32.0-rc.1
v0.31.1
v0.31.1-rc.1
v0.31.0
v0.30.0
v0.30.0-rc.8
v0.30.0-rc.7
v0.30.0-rc.6
v0.30.0-rc.5
v0.30.0-rc.4
v0.29.4
v0.29.4-rc.2
v0.29.3
v0.29.3-rc.1
v0.29.2
v0.29.2-rc.1
v0.29.1
v0.29.1-rc.1
v0.29.0
v0.29.0-rc.8
v0.29.0-rc.7
v0.29.0-rc.6
v0.29.0-rc.5
v0.29.0-rc.4
v0.29.0-rc.3
v0.29.0-rc.2
v0.29.0-rc.1
v0.28.0
v0.28.0-rc.5
v0.28.0-rc.4
v0.28.0-rc.3
v0.28.0-rc.2
v0.28.0-rc.1
v0.27.1
v0.27.1-rc.2
v0.27.1-rc.1
v0.27.0
v0.27.0-rc.8
v0.27.0-rc.7
v0.27.0-rc.6
v0.27.0-rc.5
v0.27.0-rc.4
v0.27.0-rc.3
v0.27.0-rc.2
v0.27.0-rc.1
v0.26.1
v0.26.1-rc.1
v0.26.0
v0.26.0-rc.16
v0.26.0-rc.15
v0.26.0-rc.14
v0.26.0-rc.13
v0.26.0-rc.12
v0.26.0-rc.11
v0.26.0-rc.10
v0.26.0-rc.9
v0.26.0-rc.8
v0.26.0-rc.7
v0.26.0-rc.6
v0.26.0-rc.5
v0.26.0-rc.4
v0.26.0-rc.3
v0.26.0-rc.2
v0.25.1
v0.25.0
v0.25.0-rc.4
v0.25.0-rc.3
v0.25.0-rc.2
v0.24.0
v0.24.0-rc.1
v0.23.1
v0.23.0
v0.23.0-rc.3
v0.1.0-rc.3
v0.1.0-rc.2
v0.22.2
v0.22.1
untagged-f7110823363bdf8f3e1e
v0.22.0
v0.22.0-rc.15
v0.22.0-rc.14
v0.22.0-rc.13
v0.22.0-rc.12
v0.22.0-rc.11
v0.22.0-rc.10
v0.21.6
v0.22.0-rc.9
v0.21.5
v0.21.5-rc.1
v0.21.4
v0.21.4-rc.6
v0.21.4-rc.5
v0.21.4-rc.4
v0.21.4-rc.3
v0.21.3
v0.21.2
v0.21.2-rc.1
v0.21.1-rc.4
v0.21.1-rc.3
v0.21.0-rc.4
v0.21.0-rc.3
v0.21.0-rc.1
v0.20.0
v0.20.0-rc9
v0.20.0-rc8
v0.20.0-rc7
v0.20.0-rc6
v0.20.0-rc5
v0.20.0-rc4
v0.20.0rc2
v0.20.0rc1
v0.19.4
v0.19.4rc2
v0.19.5rc1
v0.19.4rc1
v0.19.3
v0.19.3rc2
v0.19.3rc1
v0.19.2
v0.19.2rc1
v0.19.1
v0.19.1rc3
v0.19.1rc2
v0.19.1rc1
v0.19.0
v0.19.0rc4
v0.19.0rc3
v0.19.0rc2
v0.19.0-rc2
v0.19.0rc1
v0.18.2
v0.18.2rc1
v0.18.1rc1
v0.18.0
v0.18.0rc5
v0.18.0rc4
v0.18.0rc3
v0.18.0rc2
v0.18.0rc1
v0.17.1
v0.17.1rc1
v0.17.0
v0.17.0rc3
v0.17.0rc2
v0.17.0rc1
v0.16.1
v0.16.1rc3
v0.16.1rc2
v0.16.0
v0.16.0rc7
v0.16.0rc6
v0.16.0rc5
v0.16.0rc4
v0.16.0rc3
v0.16.0rc2
v0.16.0rc1
v0.15.1
v0.15.1rc2
v0.15.1rc1
v0.15.0
v0.15.0rc5
v0.15.0rc4
v0.15.0rc3
v0.15.0rc2
v0.15.0rc1
v0.14.3
v0.14.3rc3
v0.14.3rc2
v0.14.3rc1
v0.14.2
v0.14.2rc1
v0.14.1
v0.14.1rc1
v0.14.0
v0.14.0rc4
v0.14.0rc3
v0.14.0rc2
v0.14.0rc1
v0.13.0
v0.13.0rc1
v0.12.2rc9
v0.12.2rc8
v0.12.2rc7
v0.12.2rc6
v0.12.2rc5
v0.12.2rc4
v0.12.2rc3
v0.12.2rc2
v0.12.2rc1
v0.12.1rc1
v0.12.0
v0.12.0rc8
v0.12.0rc7
v0.12.0rc6
v0.12.0rc5
v0.12.0rc4
v0.12.0rc3
v0.12.0rc2
v0.12.0rc1
v0.11.9
v0.11.9rc1
v0.11.8
v0.11.8rc1
v0.11.7
v0.11.7rc1
v0.11.6
v0.11.6rc1
v0.11.5
v0.11.5rc1
v0.11.4
v0.11.4rc1
v0.11.3
v0.11.3rc1
v0.11.2
v0.11.2rc1
v0.11.1rc1
v0.11.0
v0.11.0rc1
v0.10.1rc1
v0.10.0
v0.10.0rc9
v0.10.0rc8
v0.10.0rc7
v0.10.0rc6
v0.10.0rc5
v0.10.0rc4
v0.10.0rc3
v0.10.0rc2
v0.10.0rc1
v0.9.2rc24
v0.9.2rc23
v0.9.2rc22
v0.9.2rc21
v0.9.2rc20
v0.9.2rc19
v0.9.2rc18
v0.9.2rc15
v0.9.2rc14
v0.9.2rc13
v0.9.2rc12
v0.9.2rc11
v0.9.2rc10
v0.9.2rc9
v0.9.2rc8
v0.9.2rc7
v0.9.2rc6
v0.9.2rc5
v0.9.2rc4
v0.9.2rc3
v0.9.2rc2
v0.9.2rc1
v0.9.1
v0.9.1rc6
v0.9.1rc5
v0.9.1rc4
v0.9.1rc3
v0.9.1rc2
v0.9.1rc1
v0.9.0
v0.9.0rc17
v0.9.0rc16
v0.9.0rc15
v0.9.0rc14
v0.9.0rc13
v0.9.0rc12
v0.9.0rc11
test-daemon-release-19
test-daemon-release-18
test-daemon-release-17
test-daemon-release-16
test-daemon-release-15
test-daemon-release-14
test-daemon-release-13
test-daemon-release-12
test-daemon-release-11
test-daemon-release-10
test-daemon-release-9
test-daemon-release-8
test-daemon-release-7
test-daemon-release-6
test-daemon-release-5
test-daemon-release-4
v0.9.0rc10
test-daemon-release-3
test-daemon-release-2
test-daemon-release
test-some-more
v0.9.0rc9
v0.9.0rc8
v0.9.0rc7
v0.9.0rc6
v0.9.0rc5
v0.9.0rc4
v0.9.0rc3
v0.9.0rc2
test-teamcity-tags
test-annotated-tags
v0.9.0rc1
v0.9.0rc0
Labels
Clear labels
Work is part of a proposal
Beamer is waiting on you!
Discuss this issue at the next planning meeting, then remove this label
Welcome to Hacktoberfest
Long-term storage
No knowledge of the existing code required
Some knowledge of the existing code is recommended
Significant knowledge of the existing code is recommended
Intimate knowledge of the existing code is recommended
Solution unclear, needs research
Issue needs to be groomed before work can start
Priority level needs to be defined
Issue needs step-by-step instructions on how to reproduce in latest code
Needs technical design signoff before implementation can begin
Temporarily paused
Issue is blocking release, do ASAP
Work needs to be moved into sprint ASAP
Work should be done but can stay in the backlog for now
Work needs to be done within 2-3 sprints
general redesign not prioritize for anyone release
Requires work on lbry-sdk repo
Existing functionality is wrong or broken
A conversation. No specific changes requested
Existing (or partially existing) functionality needs to be changed
New functionality that does not exist yet
Minimal user-visible changes, but significant internal work
Either work that's not related to the code, or a small chore that does not fit into other categories
Solution needs additional user testing
Work that was not planned into the spirnt, took priority over planned work
accessibility
app-parity
area: creator
area: daemon
area: design
area: devops
area: discovery
area: docs
area: installer
area: internal
area: livestream
area: performance
area: proposal
Work is part of a proposal
area: reposts
area: rewards
area: search
area: security
area: subscriptions
area: sync
area: ux
area: viewer
area: wallet
BEAMER
Beamer is waiting on you!
channel
comments
community PR
consider soon
Discuss this issue at the next planning meeting, then remove this label
core team
css
dependencies
electron
Epic
feature request
first-timers-only
good first issue
hacktoberfest
Welcome to Hacktoberfest
help wanted
hub-dependent
icebox
Long-term storage
Invalid
level: 0
level: 1
No knowledge of the existing code required
level: 2
Some knowledge of the existing code is recommended
level: 3
Significant knowledge of the existing code is recommended
level: 4
Intimate knowledge of the existing code is recommended
merge when green
needs: exploration
Solution unclear, needs research
needs: grooming
Issue needs to be groomed before work can start
needs: priority
Priority level needs to be defined
needs: repro
Issue needs step-by-step instructions on how to reproduce in latest code
needs: tech design
Needs technical design signoff before implementation can begin
notifications
odysee
on hold
Temporarily paused
playlists
priority: blocker
Issue is blocking release, do ASAP
priority: high
Work needs to be moved into sprint ASAP
priority: low
Work should be done but can stay in the backlog for now
priority: medium
Work needs to be done within 2-3 sprints
protocol dependent
recsys
redesign
general redesign not prioritize for anyone release
regression
resilience
sdk dependent
Requires work on lbry-sdk repo
Tom's Wishlist
trending
type: bug
Existing functionality is wrong or broken
type: discussion
A conversation. No specific changes requested
type: improvement
Existing (or partially existing) functionality needs to be changed
type: new feature
New functionality that does not exist yet
type: refactor
Minimal user-visible changes, but significant internal work
type: task
Either work that's not related to the code, or a small chore that does not fit into other categories
type: testing
Solution needs additional user testing
unplanned
Work that was not planned into the spirnt, took priority over planned work
windows
No labels
accessibility
app-parity
area: creator
area: daemon
area: design
area: devops
area: discovery
area: docs
area: installer
area: internal
area: livestream
area: performance
area: proposal
area: reposts
area: rewards
area: search
area: security
area: subscriptions
area: sync
area: ux
area: viewer
area: wallet
BEAMER
channel
comments
community PR
consider soon
core team
css
dependencies
electron
Epic
feature request
first-timers-only
good first issue
hacktoberfest
help wanted
hub-dependent
icebox
Invalid
level: 0
level: 1
level: 2
level: 3
level: 4
merge when green
needs: exploration
needs: grooming
needs: priority
needs: repro
needs: tech design
notifications
odysee
on hold
playlists
priority: blocker
priority: high
priority: low
priority: medium
protocol dependent
recsys
redesign
regression
resilience
sdk dependent
Tom's Wishlist
trending
type: bug
type: discussion
type: improvement
type: new feature
type: refactor
type: task
type: testing
unplanned
windows
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
LBRYCommunity/lbry-desktop#3440
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
We should use
__nfor numeric messages to support unlimited, language-specific messages.More: https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
I saw that the number of places where
if-statements are used in the code to pick the correct plural form is increasing. Havingifin every piece of source code is a mess that makes it less readable and introduces new errors. It also assumes that the developer understands the plural rules of all language as he must add the correctif-blocks (for Russian this would be 4, for Arabic it's up to 6).All this should go to a central function that does the desired replacements automatically. In the source code, only a single method call should remain.
I would recommend to adapt the ICU recommendations for plural and gender oriented message formatting as far as possible.
__().More information can be found here
WARNING: No real experience with i18 and languages I work with only contains one plural form
On the code side it could be only one method with ONE specific translation key that, behind the scene, change according with the number.
Eg. __n('You have %n messages', n)
TLDR: Behind the scene it will look for the key 'You have %n messages' +
[${n}]I added a kind of [n] at the end just to recognise such string, could append only the number
If n is 1 then it will look for 'You have %n messages[1]', if this is 3 'You have %n messages[3]', ...
Downsides:
@Suisse00 The downsides you mention are nearly completely covered by the ICU model:
Would it make sense when I provide an example in source code?
@marko-lorentz thanks for your message. I get the impression you know more about
i18nthan anyone at @lbryio currently 😁, but we're always happy to learn from those that know more than us.foo != 1 ? __('Plural foos') : __('One foo')reduced to one string?@seanyesmunt please read/follow this thread
For number 2, doing that would also solve the "can't reuse the same string in different locations for my language" problem that few have reported (https://github.com/lbryio/lbry-desktop/pull/4340#issuecomment-641476349). I believe that if more translators verify the context of the strings, we'll get more reports of this issue.
Sidenote concerning the use of entire strings in code:
The "have a complete string in the code"-approach has some charm (like: the software will work out of the box - even without any translations - and of course the explicit in-context listing of all replacement parameters with (hopefully) good names in an example phrase to ease understanding for the translators).
But it has also some well known disadvantages (like: fixing typos will ping all translators if Transifex is aware of what you do and you will end up having duplicates or close duplicates that cannot easily be kept "similar" by the translators).
My conclusion at the moment: I don't dare to propose a solution for this as you can do it one way or the other. It must make sense to those who work with the code and do tests on a daily base. Maybe it might be worth a try to do both: Have a set constants that can be reused as well as plain strings. The decision, when to offer a publicly visible constant like 'TERM_FOLLOWER' instead of a private plain string might be challenging.
(Translators should at least have a short look at the actual places where their texts are used. And it feels strange that I wasn't able to find good support for hyperlinks (e.g. to the correct place in the lbry.tv UI or to the source code) and screenshots in Transifex - something that is quite common in other translation support systems. Maybe I'm just to stupid to find it.)
I will try to answer the questions raised by @kauffj:
otherin the ICU model)oneform and theotherform separately if the target language requires these 2 forms (this will need a try I think - never trust the docu of a tool) (the Transifex docu also doesn't mention how thezeroform is supported and it would really be a mess if it is not, as you need "You don't have a car." instead of "You have 0 cars.")I'm not a JS developer at all (I usually do Java backend stuff) but I'm sure this can be wrapped with a generic vararg function or fancy other stuff. Whether it is
__n(...)or whatever might be a decision to make after reading through the docu of the lib - as depending on lib, there might be some more to discover, like e.g. nested replacements.