# Accessible copy, button labels and localization

*Slack Developer Study Guide · Design a Great User Experience · Last updated October 21, 2026 · https://www.certifyforce.com/study-guide/slack-developer/design-a-great-user-experience/accessible-copy-button-labels-and-localization*

How to write Block Kit content that works with screen readers and for every reader: emoji placement, meaning beyond colour, alt text, labelled inputs, specific button copy, and choosing channel or user locale when localizing, including what an app cannot localize.

- Certification: Salesforce Slack Developer
- Exam section: Design a Great User Experience
- Study guide: https://www.certifyforce.com/study-guide/slack-developer

**Official exam objective:**

> Build a great user experience that aligns with Slack’s commitment; to make work life simpler, more pleasant and more productive.

## What the exam expects

- Apply Slack's screen reader guidance to emoji: never as a control or a word, paired with text, at the end of a line, not as bullets, and in a header or its subtext but not both.
- Convey meaning with more than colour, and write context-specific `alt_text` for every meaningful image.
- Build forms from input blocks with clear labels and descriptive placeholder text.
- Write button labels as specific, active-voice outcomes and reject vague or emoji-only labels.
- Pick the channel locale or the user locale for each piece of content, and name what an app cannot localize.

Key terms: **screen reader** (a tool that reads digital content aloud for people with difficulty seeing); **text alias** (an emoji's name, read as "[alias] emoji"); **`alt_text`** (the required plain-text summary of an image); **input block** (the block that wraps a form element with a required label); **locale** (a channel's or user's language preference, returned with `include_locale`).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| How screen readers announce emoji | "[alias] emoji"; no way to mark one decorative | [Designing with Block Kit](https://docs.slack.dev/concepts/designing-with-block-kit/) |
| Emoji placement | End of a sentence or line; header or subtext, not both | [Designing with Block Kit](https://docs.slack.dev/concepts/designing-with-block-kit/) |
| Colour | Never the only carrier of meaning; contrast 4.5:1 for regular text | [Designing with Block Kit](https://docs.slack.dev/concepts/designing-with-block-kit/) |
| Button text | `plain_text`, truncates around 30 characters, max 75 | [Button element](https://docs.slack.dev/reference/block-kit/block-elements/button-element) |
| `accessibility_label` | Read by screen readers instead of the button text; max 75 | [Button element](https://docs.slack.dev/reference/block-kit/block-elements/button-element) |
| Image `alt_text` | Required, plain text, max 2,000 characters | [Image block](https://docs.slack.dev/reference/block-kit/blocks/image-block) |
| Input block `label` | Required `plain_text`; optional grey `hint` below | [Input block](https://docs.slack.dev/reference/block-kit/blocks/input-block) |
| Locale lookup | `include_locale: true` on `conversations.info` or `users.info` (default false) | [conversations.info method](https://docs.slack.dev/reference/methods/conversations.info), [users.info method](https://docs.slack.dev/reference/methods/users.info) |
| Not localizable | Slash command and message action pre-configured text, app display name | [App design](https://docs.slack.dev/surfaces/app-design/) |

## Check yourself

- Why must an emoji never be the only text on a button?
- Why is a red "Cancel" button not accessible enough?
- When should an app use a user's locale instead of the channel's?
- Which text can an app not localize per user?
- What should a select menu in a modal form have besides its options?

## Sources

- [Designing with Block Kit](https://docs.slack.dev/concepts/designing-with-block-kit/)
- [App design](https://docs.slack.dev/surfaces/app-design/)
- [Button element](https://docs.slack.dev/reference/block-kit/block-elements/button-element)
- [Image block](https://docs.slack.dev/reference/block-kit/blocks/image-block)
- [Input block](https://docs.slack.dev/reference/block-kit/blocks/input-block)
- [conversations.info method](https://docs.slack.dev/reference/methods/conversations.info)
- [users.info method](https://docs.slack.dev/reference/methods/users.info)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 7 linked practice questions, and unlimited timed mock exams are included with the Slack Developer pack (USD $19): https://www.certifyforce.com/practice-exams
