- Shipped
- September 2, 2026 at 1:08 AM UTC
- Author
- Kamo
- Commit
- 00b3862
Both SMS refusal paths quote the server when it gives a sentence and fall back to one of their own when it gives only a machine code. Those two fallbacks were English string literals in the components, so members reading the product in any of the other twenty locales got them in English — the one place the wording matters most, because it is the only thing on screen when the window has otherwise failed to open. They are now **************** and .resolveFailed, already on the dictionary's main. SmsTool keeps the server's words in state and chooses the wording at render rather than inside the effect. The translator is a fresh function on every render, so an effect closing over it would have to list it as a dependency and would then re-run on every render it had itself caused. Both of this component's test files now mock next-intl: the badge test because it renders SmsTool at all, and the refusal test because the line it asserts is a key lookup now. That test also gains the case the change is really about — a refusal that is only SMS_NOT_PROVISIONED falls back to our own line rather than showing the member an enum.