Meeting Locale

Last updated Oct 19, 2026 RealtimeKit's UI Kit allows you to customize all the text within the video call interface. You can personalize the text to align with your specific locale needs.

Prerequisites

This page builds upon the Render Default Meeting UI & Build Your Own UI guides. Make sure you have read them first and understand how to use the default meeting UI components.

This page is not available for the iOS, Androidplatform.

WebMobile

ReactWeb ComponentsAngular

Customize the language pack

RealtimeKit's default language pack can be customized to match your application's locale requirements. You can override any text string used in the UI Kit components.

The React Native UI Kit uses a language dictionary object to store all UI strings. You can override any key by passing a partial dictionary to the useLanguage() function, then pass the result to the RtkMeeting component via the t prop.

Import the language utilities

RealtimeKit's default language pack can be imported like this:

<script type="module">
    import {
        useLanguage,
        defaultLanguage,
    } from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";
</script>

RealtimeKit's default language pack can be imported like this:

import { defaultLanguage, useLanguage } from "@cloudflare/realtimekit-react-ui";

RealtimeKit's default language pack can be imported like this:

import {
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-angular-ui";
import {
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-react-native-ui";

Create your custom language pack

To replace RealtimeKit's default locale with your own, create a custom language pack by spreading the defaultLanguage object and overriding specific keys:

<body>
    <rtk-meeting id="my-meeting"></rtk-meeting>

<script type="module">
        import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";
        import {
            useLanguage,
            defaultLanguage,
        } from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";

// Customize RealtimeKit's default locale object
        const myLanguagePack = useLanguage({
            ...defaultLanguage,
            mute_all: "Mute All Users",
            leave: "Exit Call",
            join: "Join Now",
        });

const init = async () => {
            const meeting = await RealtimeKitClient.init({
                authToken: "<participant_auth_token>",
            });

const meetingEl = document.getElementById("my-meeting");
            meetingEl.meeting = meeting;
            meetingEl.showSetupScreen = true;

// Pass custom language pack
            meetingEl.t = myLanguagePack;
        };

init();
    </script>
</body>

The useLanguage function takes in your custom locale object as an argument and generates a function that retrieves the value associated with the provided key.

import {
    RealtimeKitProvider,
    useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import {
    RtkMeeting,
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";

function App() {
    const [meeting, initMeeting] = useRealtimeKitClient();
    const [authToken, setAuthToken] = useState("<participant_auth_token>");

// Customize RealtimeKit's default locale object
    const myLanguagePack = useLanguage({
        ...defaultLanguage,
        mute_all: "Mute All Users",
        leave: "Exit Call",
        join: "Join Now",
    });

useEffect(() => {
        if (authToken) {
            initMeeting({
                authToken: authToken,
            });
        }
    }, [authToken]);

return (
        <RealtimeKitProvider value={meeting}>
            <RtkMeeting showSetupScreen={true} meeting={meeting} t={myLanguagePack} />
        </RealtimeKitProvider>
    );
}

The useLanguage hook takes in your custom locale object as an argument and generates a function that retrieves the value associated with the provided key.

import { Component, OnInit } from "@angular/core";
import RealtimeKitClient from "@cloudflare/realtimekit";
import {
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-angular-ui";

@Component({
    selector: "app-meeting",
    template: `
        <rtk-meeting [meeting]="meeting" [t]="myLanguagePack"></rtk-meeting>
    `,
})
export class MeetingComponent implements OnInit {
    meeting: any;
    myLanguagePack: any;

async ngOnInit() {
        // Customize RealtimeKit's default locale object
        this.myLanguagePack = useLanguage({
            ...defaultLanguage,
            mute_all: "Mute All Users",
            leave: "Exit Call",
            join: "Join Now",
        });

this.meeting = await RealtimeKitClient.init({
            authToken: "<participant_auth_token>",
        });
    }
}

The useLanguage function takes in your custom locale object as an argument and generates a function that retrieves the value associated with the provided key.

Spread the defaultLanguage object and override specific keys. Pass the result to RtkMeeting via the t prop.

import {
  RtkMeeting,
  defaultLanguage,
  useLanguage,
} from '@cloudflare/realtimekit-react-native-ui';

function App() {
  const myLanguagePack = useLanguage({
    ...defaultLanguage,
    mute_all: 'Silenciar todo',
    leave: 'Salir',
    join: 'Unirse',
    participants: 'Participantes',
    chat: 'Chat',
    settings: 'Configuración',
  });

return (
    <RtkMeeting
      meeting={meeting}
      t={myLanguagePack}
      showSetupScreen={true}
    />
  );
}

The useLanguage function merges your overrides with the defaults. Any key you do not override keeps its English default value.

Use custom locale with UI provider

You can also pass the custom language pack to the UI provider component when building your own custom UI:

<body>
    <rtk-ui-provider id="ui-provider">
        <!-- Your custom UI components -->
    </rtk-ui-provider>

<script type="module">
        import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";
        import {
            useLanguage,
            defaultLanguage,
        } from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";

const myLanguagePack = useLanguage({
            ...defaultLanguage,
            mute_all: "Mute All Users",
        });

const meeting = await RealtimeKitClient.init({
            authToken: "<participant_auth_token>",
        });

const uiProvider = document.getElementById("ui-provider");
        uiProvider.meeting = meeting;
        uiProvider.t = myLanguagePack;
    </script>
</body>
import {
    RealtimeKitProvider,
    useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import {
    RtkUIProvider,
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";

function App() {
    const [meeting, initMeeting] = useRealtimeKitClient();
    const [authToken, setAuthToken] = useState("<participant_auth_token>");

const myLanguagePack = useLanguage({
        ...defaultLanguage,
        mute_all: "Mute All Users",
    });

useEffect(() => {
        if (authToken) {
            initMeeting({
                authToken: authToken,
            });
        }
    }, [authToken]);

return (
        <RealtimeKitProvider value={meeting}>
            <RtkUIProvider meeting={meeting} t={myLanguagePack}>
                {/* Your custom UI components */}
            </RtkUIProvider>
        </RealtimeKitProvider>
    );
}
import { Component, OnInit } from "@angular/core";
import RealtimeKitClient from "@cloudflare/realtimekit";
import {
    defaultLanguage,
    useLanguage,
} from "@cloudflare/realtimekit-angular-ui";

@Component({
    selector: "app-meeting",
    template: `
        <rtk-ui-provider [meeting]="meeting" [t]="myLanguagePack">
            <!-- Your custom UI components -->
        </rtk-ui-provider>
    `,
})
export class MeetingComponent implements OnInit {
    meeting: any;
    myLanguagePack: any;

async ngOnInit() {
        this.myLanguagePack = useLanguage({
            ...defaultLanguage,
            mute_all: "Mute All Users",
        });

this.meeting = await RealtimeKitClient.init({
            authToken: "<participant_auth_token>",
        });
    }
}

Default language reference

RealtimeKit provides a comprehensive default language pack with all the text strings used throughout the UI Kit. You can override any of these keys to customize the text displayed in your meeting interface.

Here is the complete default language pack offered by RealtimeKit: