Greasy Fork is available in English.

X to Twitter

Get our Twitter back from Elon.

// ==UserScript==
// @name         X to Twitter
// @name:ja  X to Twitter
// @description  Get our Twitter back from Elon.
// @namespace    https://xtotwitter.yakisova.com
// @version      3.0.1
// @author       yakisova41
// @match        https://twitter.com/*
// @match        https://x.com/home
// @match        https://x.com/explore
// @match        https://x.com/notifications
// @match        https://x.com/messages
// @match        https://x.com/search
// @match        https://x.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=twitter.com
// @grant        unsafeWindow
// @run-at       document-start
// @license      MIT
// @description:ja  イーロンから私達のTwitterを取り戻します
// ==/UserScript==

const DEBUG = false;

let isEnableAlert = false;
/**
 * Output log if debug mode is true.
 * @param logText
 */
function log(logText, isalert = true) {
    if (DEBUG) {
        console.log(logText);
        if (isEnableAlert && isalert) {
            alert(logText);
        }
    }
}
/**
 * Alert when log.
 */
function enableAlert() {
    isEnableAlert = true;
}

/**
 * Prevent observing dually for same element.
 */
class ObserverHooksControler {
    constructor() {
        // Record<selector, Replacer[]>
        Object.defineProperty(this, "hookHandlers", {
            enumerable: true,
            configurable: true,
            writable: true,
            value: {}
        });
    }
    addHookHandler(hookHandler) {
        if (this.hookHandlers[hookHandler.selector] === undefined) {
            this.hookHandlers[hookHandler.selector] = [];
        }
        this.hookHandlers[hookHandler.selector].push(hookHandler);
    }
    startObserve(selector, options) {
        const elem = document.querySelector(selector);
        if (elem !== null) {
            const observer = new MutationObserver(() => {
                if (this.hookHandlers[selector] !== undefined) {
                    this.hookHandlers[selector].forEach((hookHandler, i) => {
                        hookHandler.callback(elem, () => {
                            this.hookHandlers[selector] = this.hookHandlers[selector].splice(i, 1);
                        });
                    });
                }
            });
            observer.observe(elem, options);
        }
    }
}

/**
 * Favicon change
 * @param head
 */
const faviconReplacer = {
    selector: "head",
    callback: (head) => {
        const faviconHref = "data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJkSURBVHgB7VZBbtpQEH3zIW0WVYuXVaH4Bs0NSk4AOUFhEarskhMknIDsqkKlcIT0BNAT1D1B3ZJK3dmVuirwp/MhVmzAxiagKBJv9+ePZ97M/JkxsMMODwzChlD84FWQp3MxeCDHAhiumB+MJrr1+8Ryw3p/9+H4DctfIPCq49Xlw8Kv99YlMuB19885gy/i7llziwGfFFWJyR02XzSCuwiBUse7BlFVaz5LS8KQVkRXaXRJsqImfDjKSZBNyzEyFWFKVJ4KFbWLElUao6KbSk8i9TXgTPaorxTskPwOxa7/9baGt4zg8oQbNyfWYJlRU0/KUx9ZwNwYNq1ecFRzl18QpW0bB0Ks//KjV1uwlbuLJA3GxEdh5wb5yGEPl3qMd2xecYQHKnlFlVLX95kxYCFKGg5IlU2a0uLpCM68LEJA+sJ/Dm6Jy3aMjQIRakRUm+UuvfOp/X34iQSejeFo0Hdx4optG5uFH/R+GHNvANcm3VtwLs+Lvy2TRwhIOnrYHhysIuDKcCDwGbYAjglOzQt+HssElF6dvoNNOZeuCSbfSgIGMjILMo4/ExZf7TqghNLmlwm1gpSC2tmaLAZMvWGz0Iu7XpqBm2NrQNN5cD+Y5ZOTdZyok3RZMusZOJUN+QZrQFb0oQkG6xIIYHe8A03Unx/Ryd6jS2ctAsbxmFRVynGKlM5na5ePVkUe0p+h9MmraS2zXqYgmSWjOPtElHbLTVB3Q79gqQlMScxqXpeav0UWiGMmXKSNOpZAAPvKs/U/1MRoxRxl+5WD+psUy2D5IdmRVoWjnqDnLlkyO+zwaPAf1zXwZL751PUAAAAASUVORK5CYII=";
        const shortcutIcon = head.querySelector('[rel="shortcut icon"]');
        if (shortcutIcon !== null) {
            if (shortcutIcon.getAttribute("href") !== faviconHref) {
                log("favicon replace");
                shortcutIcon.href = faviconHref;
            }
        }
    },
};

const paths = {
    xLogoPath: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
    loadingXLogoPath: "M14.258 10.152L23.176 0h-2.113l-7.747 8.813L7.133 0H0l9.352 13.328L0 23.973h2.113l8.176-9.309 6.531 9.309h7.133zm-2.895 3.293l-.949-1.328L2.875 1.56h3.246l6.086 8.523.945 1.328 7.91 11.078h-3.246zm0 0",
    birdPath: "M23.643 4.937c-.835.37-1.732.62-2.675.733.962-.576 1.7-1.49 2.048-2.578-.9.534-1.897.922-2.958 1.13-.85-.904-2.06-1.47-3.4-1.47-2.572 0-4.658 2.086-4.658 4.66 0 .364.042.718.12 1.06-3.873-.195-7.304-2.05-9.602-4.868-.4.69-.63 1.49-.63 2.342 0 1.616.823 3.043 2.072 3.878-.764-.025-1.482-.234-2.11-.583v.06c0 2.257 1.605 4.14 3.737 4.568-.392.106-.803.162-1.227.162-.3 0-.593-.028-.877-.082.593 1.85 2.313 3.198 4.352 3.234-1.595 1.25-3.604 1.995-5.786 1.995-.376 0-.747-.022-1.112-.065 2.062 1.323 4.51 2.093 7.14 2.093 8.57 0 13.255-7.098 13.255-13.254 0-.2-.005-.402-.014-.602.91-.658 1.7-1.477 2.323-2.41z",
    verifiedPath: "M8.52 3.59c.8-1.1 2.04-1.84 3.48-1.84s2.68.74 3.49 1.84c1.34-.21 2.74.14 3.76 1.16s1.37 2.42 1.16 3.77c1.1.8 1.84 2.04 1.84 3.48s-.74 2.68-1.84 3.48c.21 1.34-.14 2.75-1.16 3.77s-2.42 1.37-3.76 1.16c-.8 1.1-2.05 1.84-3.49 1.84s-2.68-.74-3.48-1.84c-1.34.21-2.75-.14-3.77-1.16-1.01-1.02-1.37-2.42-1.16-3.77-1.09-.8-1.84-2.04-1.84-3.48s.75-2.68 1.84-3.48c-.21-1.35.14-2.75 1.16-3.77s2.43-1.37 3.77-1.16zm3.48.16c-.85 0-1.66.53-2.12 1.43l-.38.77-.82-.27c-.96-.32-1.91-.12-2.51.49-.6.6-.8 1.54-.49 2.51l.27.81-.77.39c-.9.46-1.43 1.27-1.43 2.12s.53 1.66 1.43 2.12l.77.39-.27.81c-.31.97-.11 1.91.49 2.51.6.61 1.55.81 2.51.49l.82-.27.38.77c.46.9 1.27 1.43 2.12 1.43s1.66-.53 2.12-1.43l.39-.77.82.27c.96.32 1.9.12 2.51-.49.6-.6.8-1.55.48-2.51l-.26-.81.76-.39c.91-.46 1.43-1.27 1.43-2.12s-.52-1.66-1.43-2.12l-.77-.39.27-.81c.32-.97.12-1.91-.48-2.51-.61-.61-1.55-.81-2.51-.49l-.82.27-.39-.77c-.46-.9-1.27-1.43-2.12-1.43zm4.74 5.68l-6.2 6.77-3.74-3.74 1.41-1.42 2.26 2.26 4.8-5.23 1.47 1.36z",
    homePath: "M21.591 7.146L12.52 1.157c-.316-.21-.724-.21-1.04 0l-9.071 5.99c-.26.173-.409.456-.409.757v13.183c0 .502.418.913.929.913h6.638c.511 0 .929-.41.929-.913v-7.075h3.008v7.075c0 .502.418.913.929.913h6.639c.51 0 .928-.41.928-.913V7.904c0-.301-.158-.584-.408-.758zM20 20l-4.5.01.011-7.097c0-.502-.418-.913-.928-.913H9.44c-.511 0-.929.41-.929.913L8.5 20H4V8.773l8.011-5.342L20 8.764z",
    homeActivePath: "M21.591 7.146L12.52 1.157c-.316-.21-.724-.21-1.04 0l-9.071 5.99c-.26.173-.409.456-.409.757v13.183c0 .502.418.913.929.913H9.14c.51 0 .929-.41.929-.913v-7.075h3.909v7.075c0 .502.417.913.928.913h6.165c.511 0 .929-.41.929-.913V7.904c0-.301-.158-.584-.408-.758z",
    oldHomePath: "M12 9c-2.209 0-4 1.791-4 4s1.791 4 4 4 4-1.791 4-4-1.791-4-4-4zm0 6c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2zm0-13.304L.622 8.807l1.06 1.696L3 9.679V19.5C3 20.881 4.119 22 5.5 22h13c1.381 0 2.5-1.119 2.5-2.5V9.679l1.318.824 1.06-1.696L12 1.696zM19 19.5c0 .276-.224.5-.5.5h-13c-.276 0-.5-.224-.5-.5V8.429l7-4.375 7 4.375V19.5z",
    oldHomeActivePath: "M12 1.696L.622 8.807l1.06 1.696L3 9.679V19.5C3 20.881 4.119 22 5.5 22h13c1.381 0 2.5-1.119 2.5-2.5V9.679l1.318.824 1.06-1.696L12 1.696zM12 16.5c-1.933 0-3.5-1.567-3.5-3.5s1.567-3.5 3.5-3.5 3.5 1.567 3.5 3.5-1.567 3.5-3.5 3.5z",
    oshogatsuXlogoPath: "M18.436 1.92h3.403l-7.433 8.495 8.745 11.563h-6.849l-5.363-7.012-6.136 7.012H1.4l7.951-9.088L.96 1.92h7.02l4.848 6.41 5.608-6.41zm-1.194 18.021h1.886L6.958 3.851H4.933l12.308 16.09z",
};
const colors = {
    twitterColor: "rgb(29, 155, 240)",
    loadingBirdColor: "rgba(29,161,242,1.00)",
};

/**
 * Add style to head
 */
function styleInject(head, env) {
    const style = document.createElement("style");
    const verifiedSelector = `a[href="/i/verified-choose"] > div > div > svg > g > path`;
    const verifiedSelectorMobile = `a[href="/i/verified-choose"] > div > svg > g > path`;
    const xLogoSelector = [
        `path[d="${paths.oshogatsuXlogoPath}"]:not(${verifiedSelector}):not(${verifiedSelectorMobile})`,
        `path[d="${paths.xLogoPath}"]:not(${verifiedSelector}):not(${verifiedSelectorMobile})`,
    ].join(",");
    const xLogoDarkmodeSelector = `div[style="text-overflow: unset; color: rgb(239, 243, 244);"] > svg > g > path:not(${verifiedSelector}):not(${verifiedSelectorMobile})`;
    const homeSelector = 'a[data-testid="AppTabBar_Home_Link"] > div > div > svg > g > path';
    style.innerHTML = `
    .x-to-twitter {
        fill: inherit;
        color: ${colors.twitterColor};
    }

    ${xLogoSelector}, path[d="${paths.loadingXLogoPath}"] {
        d:path("${paths.birdPath}");
        fill: inherit;
        color: ${colors.twitterColor};
    }

    ${xLogoDarkmodeSelector} {
        color: rgb(239, 243, 244);
    }

    div[aria-label="Loading…"] > svg > g > path {
        d:path("${paths.birdPath}");
        fill: inherit;
        color: ${colors.loadingBirdColor};
    }

    ${verifiedSelector}, ${verifiedSelectorMobile} {
        d:path("${paths.verifiedPath}");
    }

    ${homeSelector}:not(path[d="${paths.homePath}"]) {
        d:path("${paths.oldHomeActivePath}");
    }

    ${homeSelector}:not(path[d="${paths.homeActivePath}"]) {
      d:path("${paths.oldHomePath}");
    }

    ${env === "extension" || env === "userscript_windows"
        ? `
    a[data-testid="SideNav_NewTweet_Button"], button[data-testid="tweetButtonInline"], button[data-testid="tweetButtonInline"], button[data-testid="tweetButton"] {
      background-color: var(--x-to-twitter-theme)!important;
    }

    a[data-testid="SideNav_NewTweet_Button"] div[dir="ltr"], a[data-testid="SideNav_NewTweet_Button"] > div[dir="ltr"] > svg,  button[data-testid="tweetButtonInline"] div[dir="ltr"], button[data-testid="tweetButtonInline"] div[dir="ltr"], button[data-testid="tweetButton"] div[dir="ltr"]  {
      color: rgb(255, 255, 255)!important;
    }
    `
        : ""}
    `;
    head.appendChild(style);
}

const titleReplacer = {
    selector: "head",
    callback: (head) => {
        const titleElem = head.querySelector("title");
        if (titleElem !== null) {
            if (titleElem.innerHTML === "X") {
                log("Title repalce", false);
                titleElem.innerHTML = "Twitter";
            }
            else {
                log("Title repalce", false);
                const split = titleElem.innerHTML.split("/");
                if (split[1] === " X") {
                    split[1] = " Twitter";
                    titleElem.innerHTML = split.join("/");
                }
            }
        }
    },
};

/**
 * Get theme rgb from react state.
 * @returns {Promise<string>} theme RGB
 */
function getThemeColor() {
    function foundLtr(ltr) {
        const propsKey = Object.keys(ltr).filter((key) => key.match(/^__reactProps/))[0];
        const props = ltr[propsKey];
        const store = props.children.props.children.props.children[1].props.children.props
            .children.props.children.props.value.store;
        const state = store.getState();
        switch (state.settings.local.themeColor) {
            case "purple500":
                return "rgb(120, 86, 255)";
            case "orange500":
                return "rgb(255, 122, 0)";
            case "magenta500":
                return "rgb(249, 24, 128)";
            case "green500":
                return "rgb(0, 186, 124)";
            case "yellow500":
                return "rgb(255, 212, 0)";
            case "blue500":
                return "rgb(29, 155, 240)";
            default:
                return "rgb(29, 155, 240)";
        }
    }
    return new Promise((resolve) => {
        const reactRoot = document.querySelector("#react-root");
        const ltrO = new MutationObserver(() => {
            const ltr = document.querySelector('#react-root > div > div > div[dir="ltr"]');
            if (ltr !== null) {
                const themeColorRGB = foundLtr(ltr);
                resolve(themeColorRGB);
                ltrO.disconnect();
            }
            else {
                throw new Error("Ltr is null");
            }
        });
        if (reactRoot !== null) {
            ltrO.observe(reactRoot, {
                subtree: true,
                childList: true,
            });
        }
    });
}
/**
 * Set theme rgb to css variable.
 * @param {*} themeColor
 * @param {*} head
 */
function setThemeColor(themeColor, head) {
    const style = document.createElement("style");
    style.innerHTML = `
    :root {
      --x-to-twitter-theme : ${themeColor};
    }
  `;
    head.appendChild(style);
}

/**
 * Replace PWA's manifest.
 * !! It's worked on extension environment only
 */
function replaceManifest(head) {
    const oldManifestEl = document.querySelector('link[rel="manifest"]');
    if (oldManifestEl !== null) {
        oldManifestEl.remove();
    }
    const manifestEl = document.createElement("link");
    manifestEl.setAttribute("rel", "manifest");
    manifestEl.setAttribute("crossorigin", "use-credentials");
    manifestEl.setAttribute("href", chrome.runtime.getURL("/twitterManifest.json"));
    head.prepend(manifestEl);
}

const forSafari = {
    selector: "body",
    callback: (body) => {
        const pathElems = body.querySelectorAll([
            `path[d="${paths.xLogoPath}"]:not(.x-to-twitter):not(a[href="/i/verified-choose"] > div > div > svg > g > path, a[href="/i/verified-choose"] > div > svg > g > path)`,
            `path[d="${paths.oshogatsuXlogoPath}"]:not(.x-to-twitter):not(a[href="/i/verified-choose"] > div > div > svg > g > path, a[href="/i/verified-choose"] > div > svg > g > path)`,
            `path[d="${paths.loadingXLogoPath}"]:not(.x-to-twitter)`,
        ].join(","));
        if (pathElems.length !== 0) {
            pathElems.forEach((path) => {
                log("For safari");
                path.setAttribute("d", paths.birdPath);
                path.classList.add("x-to-twitter");
            });
        }
        const verifiedElems = document.querySelectorAll(`a[href="/i/verified-choose"] > div > div > svg > g > path:not(.x-to-twitter-noncolor), a[href="/i/verified-choose"] > div > svg > g > path:not(.x-to-twitter-noncolor)`);
        if (verifiedElems.length !== 0) {
            verifiedElems.forEach((path) => {
                path.setAttribute("d", paths.verifiedPath);
                path.classList.add("x-to-twitter-noncolor");
            });
        }
        const homeicon = document.querySelector(`a[data-testid="AppTabBar_Home_Link"] > div > div > svg > g > path:not(.x-to-twitter-birdhome)`);
        if (homeicon !== null) {
            const d = homeicon.getAttribute("d");
            if (d === paths.homeActivePath) {
                homeicon.setAttribute("d", paths.oldHomeActivePath);
            }
            if (d === paths.homePath) {
                homeicon.setAttribute("d", paths.oldHomePath);
            }
            homeicon.classList.add("x-to-twitter-birdhome");
        }
        const loading = document.querySelector('div[aria-label="Loading…"] > svg > g > path');
        if (loading !== null) {
            loading.setAttribute("d", paths.birdPath);
        }
    },
};

const i18n = {
    "ar-x-fm": {
        f70a36d0: "تغريد الكل",
        d25289b4: "مُعاد تغريدها بواسطة",
        bab1f8b0: "التغريدات",
        h99e9c95: 'return["قام "," بإعادة تغريدها"]',
        d2c7a41c: "غرّدي ردَكِ",
        e2414184: 'return"تغريد"+n(e.count,"ات","ة","ة","ة","تا","ة")+" اقتباس"',
        hb7b0cea: 'return e.retweetCount+" إعاد"+n(e.retweetCount,"ات","ة","ة","ة","تا","ة")+" تغريد"',
        bd7c039f: "تغريدات اقتباس",
        bea869b3: "غرّدي",
        hdf72269: "ردّ",
        e349147b: "ماذا يحدث؟",
        f3bbbb87: "التراجع عن التغريدة",
        c9d7235d: "اقتباس التغريدة",
        d6c85149: "إعادة التغريد",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") غرّد:\\n"+e.tweet',
        d6917e0c: 'return"عرض "+e.count+" تغريد"+n(e.count,"ات","ة","ة","ة","تين","ة")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    bg: {
        f70a36d0: "Туитване на всички",
        d25289b4: "Ретуитнат от",
        bab1f8b0: "Туитове",
        h99e9c95: 'return[""," ретуитна"]',
        d2c7a41c: "Отговори с туит",
        e2414184: 'return""+n(e.count,"Цитиране на туита","Туитове с цитат")',
        hb7b0cea: 'return e.retweetCount+" ретуит"+n(e.retweetCount,"","а")',
        bd7c039f: "Туитове с цитат",
        bea869b3: "Туит",
        hdf72269: "Отговор",
        e349147b: "Какво се случва?",
        f3bbbb87: "Отмяна на ретуитването",
        c9d7235d: "Цитиране на туита",
        d6c85149: "Ретуитване",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0c: 'return"Показване на "+e.count+" туит"+n(e.count,"","а")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    bn: {
        f70a36d0: "সব টুইট করুন",
        d25289b4: "পুনঃ টুইট করেছেন",
        bab1f8b0: "টুইটগুলি",
        h99e9c95: 'return[""," পুনঃ টুইট করেছেন"]',
        d2c7a41c: "আপনার উত্তর টুইট করুন",
        e2414184: 'return"টুইট উদ্ধৃত"+a(e.count," করুন","িগুলো")',
        hb7b0cea: 'return e.retweetCount+" পুনঃ"+a(e.retweetCount," টুইট করুন","টুইটগুলো")',
        bd7c039f: "টুইট উদ্ধৃতিগুলো",
        hdf72269: "উত্তর",
        e349147b: "কী ঘটছে?",
        f3bbbb87: "পুনঃ টুইট পুর্বাবস্থায় ফেরান",
        c9d7235d: "টুইট উদ্ধৃত করুন",
        d6c85149: "পুনঃটুইট",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") টুইট করেছেন: "+e.tweet',
        d6917e0c: 'return e.count+" টুইট"+a(e.count,"","গুলো")+" দেখান"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        bea869b3: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ca: {
        f70a36d0: "Tuita-ho tot",
        d25289b4: "Retuitat per",
        bab1f8b0: "Tuits",
        h99e9c95: 'return[""," ha retuitat"]',
        d2c7a41c: "Tuita una resposta",
        e2414184: 'return""+r(e.count,"Cita el tuit","Tuits amb cita")',
        hb7b0cea: 'return e.retweetCount+" Retuit"+r(e.retweetCount,"","s")',
        bd7c039f: "Tuits amb cita",
        bea869b3: "Tuita",
        hdf72269: "Respon",
        e349147b: "Què passa?",
        f3bbbb87: "Desfés el retuit",
        c9d7235d: "Cita el tuit",
        d6c85149: "Retuit",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") ha tuitat: "+e.tweet',
        d6917e0c: 'return"Mostra "+e.count+" Tuit"+r(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    cs: {
        f70a36d0: "Tweetnout vše",
        d25289b4: "Retweetnuto uživateli",
        bab1f8b0: "Tweety",
        h99e9c95: 'return["Uživatel "," retweetnul"]',
        d2c7a41c: "Tweetnout odpověď",
        e2414184: 'return""+n(e.count,"Tweety s citací","Tweety s citací","Citovat Tweet","Tweety s citací")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+n(e.retweetCount,"y","y","","ů")',
        bd7c039f: "Tweety s citací",
        bea869b3: "Tweet",
        hdf72269: "Odpovědět",
        e349147b: "Co se právě děje?",
        f3bbbb87: "Zrušit Retweet",
        c9d7235d: "Citovat Tweet",
        d6c85149: "Retweetnout",
        d91695cb: 'return"Uživatel "+e.fullName+" (@"+e.screenName+") tweetnul: "+e.tweet',
        d6917e0c: 'return"Ukázat "+e.count+" "+n(e.count,"tweety","tweety","Tweet","tweetů")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    da: {
        f70a36d0: "Tweet alt",
        d25289b4: "Retweetet af",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," retweetede"]',
        d2c7a41c: "Tweet dit svar",
        e2414184: 'return"Cit"+i(e.count,"ér Tweet","at-Tweets")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+i(e.retweetCount,"","s")',
        bd7c039f: "Citat-Tweets",
        bea869b3: "Tweet",
        hdf72269: "Svar",
        e349147b: "Hvad sker der?",
        f3bbbb87: "Fortryd Retweet",
        c9d7235d: "Citér Tweet",
        d6c85149: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") tweetede: "+e.tweet',
        d6917e0c: 'return"Vis "+e.count+" Tweet"+i(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    de: {
        f70a36d0: "Alle twittern",
        d25289b4: "Retweetet von",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," hat retweetet"]',
        d2c7a41c: "Twittere deine Antwort",
        e2414184: 'return""+r(e.count,"Tweet zitieren","Zitierte Tweets")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+r(e.retweetCount,"","s")',
        bd7c039f: "Zitierte Tweets",
        bea869b3: "Twittern",
        hdf72269: "Antworten",
        e349147b: "Was gibt's Neues?",
        f3bbbb87: "Retweet rückgängig machen",
        c9d7235d: "Tweet zitieren",
        d6c85149: "Retweeten",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0c: 'return e.count+" Tweet"+r(e.count,"","s")+" anzeigen"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    el: {
        f70a36d0: "Δημοσίευση όλων ως Tweet",
        d25289b4: "Έγινε Retweet από",
        bab1f8b0: "Tweet",
        h99e9c95: 'return["Ο χρήστης "," έκανε Retweet"]',
        d2c7a41c: "Κάντε Tweet με την απάντησή σας",
        e2414184: 'return""+n(e.count,"Παράθεση Tweet","Tweet με παράθεση")',
        hb7b0cea: 'return e.retweetCount+" Retweet"',
        bd7c039f: "Tweet με παράθεση",
        bea869b3: "Tweet",
        hdf72269: "Απάντηση",
        e349147b: "Τι συμβαίνει;",
        f3bbbb87: "Αναίρεση Retweet",
        c9d7235d: "Παράθεση Tweet",
        d6c85149: "Retweet",
        d91695cb: 'return"Ο χρήστης "+e.fullName+" (@"+e.screenName+") έγραψε το Tweet: "+e.tweet',
        d6917e0c: 'return"Εμφάνιση "+e.count+" Tweet"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    "en-GB": {
        f70a36d0: "Tweet all",
        d25289b4: "Retweeted by",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," Retweeted"]',
        d2c7a41c: "Tweet your reply",
        e2414184: 'return"Quote Tweet"+n(e.count,"","s")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+n(e.retweetCount,"","s")',
        bd7c039f: "Quote Tweets",
        bea869b3: "Tweet",
        hdf72269: "Reply",
        e349147b: "What’s happening?",
        f3bbbb87: "Undo Retweet",
        c9d7235d: "Quote Tweet",
        d6c85149: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted: "+e.tweet',
        d6917e0c: 'return"Show "+e.count+" Tweet"+n(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    en: {
        f70a36d0: "Tweet all",
        d25289b4: "Retweeted by",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," Retweeted"]',
        d2c7a41c: "Tweet your reply",
        e2414185: 'return"Quote Tweet"+n(e.count,"","s")',
        hb7b0ceb: 'return e.retweetCount+" Retweet"+n(e.retweetCount,"","s")',
        bd7c0390: "Quote Tweets",
        bea869b4: "Tweet",
        d17df548: "Reply",
        e349147c: "What’s happening?",
        fa9ce7f4: "Undo Retweet",
        c9d7235e: "Quote Tweet",
        d6c8514a: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return"Show "+e.count+" Tweet"+n(e.count,"","s")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    es: {
        f70a36d0: "Twittear todo",
        d25289b4: "Retwitteado por",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," lo retwitteó"]',
        d2c7a41c: "Twittea tu respuesta",
        e2414184: 'return""+r(e.count,"Citar Tweet","Tweets citados")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+r(e.retweetCount,"","s")',
        bd7c039f: "Tweets citados",
        bea869b3: "Twittear",
        hdf72269: "Responder",
        e349147b: "¿Qué está pasando?",
        f3bbbb87: "Deshacer Retweet",
        c9d7235d: "Citar Tweet",
        d6c85149: "Retwittear",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") twitteó: "+e.tweet',
        d6917e0c: 'return"Mostrar "+e.count+" Tweet"+r(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    fa: {
        f70a36d0: "توییت به همه",
        d25289b4: "بازتوییت‌ شد توسط",
        bab1f8b0: "توييت‌ها",
        h99e9c95: 'return[""," بازتوییت کرد"]',
        d2c7a41c: "پاسختان را توییت کنید",
        e2414184: 'return"نقل‌توییت"',
        hb7b0cea: 'return e.retweetCount+" بازتوییت"',
        bd7c039f: "نقل‌توییت‌ها",
        bea869b3: "توییت",
        hdf72269: "پاسخ",
        e349147b: "چه خبر است؟",
        f3bbbb87: "لغو بازتوییت",
        c9d7235d: "نقل‌توییت",
        d6c85149: "بازتوییت",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") توییت کرد: "+e.tweet',
        d6917e0c: 'return"نمایش "+e.count+" تو"+f(e.count,"یی","يي")+"ت"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    eu: {
        f70a36d0: "Txiotu guztiak",
        d25289b4: "Bertxiotua:",
        bab1f8b0: "Txioak",
        h99e9c95: 'return[""," erabiltzaileak bertxiotu du"]',
        d2c7a41c: "Txiokatu erantzuna",
        e2414184: 'return"Quote Tweet"+n(e.count,"","s")',
        hb7b0cea: 'return e.retweetCount+" bertxio"',
        bd7c039f: "Aipatu txioak",
        bea869b3: "Txio",
        hdf72269: "Erantzun",
        e349147b: "Zer ari da gertatzen?",
        f3bbbb87: "Desegin birtxiokatzea",
        c9d7235d: "Txioa apaitu",
        d6c85149: "Bertxiotu",
        d91695cb: 'return e.fullName+"(e)k (@"+e.screenName+") Txiokatu du: "+e.tweet',
        d6917e0c: 'return"Show "+e.count+" Tweet"+n(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    fi: {
        f70a36d0: "Twiittaa kaikki",
        d25289b4: "Uudelleentwiitannut",
        bab1f8b0: "Twiitit",
        h99e9c95: 'return[""," uudelleentwiittasi"]',
        d2c7a41c: "Twiittaa vastauksesi",
        bd7c039f: "Twiitin lainaukset",
        bea869b3: "Twiittaa",
        hdf72269: "Vastaa",
        e349147b: "Mitä tapahtuu?",
        f3bbbb87: "Kumoa uudelleentwiittaus",
        c9d7235d: "Twiitin lainaus",
        d6c85149: "Uudelleentwiittaa",
        e2414184: null,
        e2414185: null,
        hb7b0ceb: null,
        hb7b0cea: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d91695cb: null,
        d6917e0c: null,
        d6917e0d: null,
    },
    fr: {
        f70a36d0: "Tout tweeter",
        d25289b4: "Retweeté par",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," a retweeté"]',
        d2c7a41c: "Tweetez votre réponse.",
        e2414185: 'return""+s(e.count,"Citer le Tweet","Tweets cités")',
        hb7b0ceb: 'return e.retweetCount+" Retweet"+s(e.retweetCount,"","s")',
        bd7c0390: "Tweets cités",
        bea869b4: "Tweeter",
        d17df548: "Répondre",
        e349147c: "Quoi de neuf ?",
        fa9ce7f4: "Annuler le Retweet",
        c9d7235e: "Citer le Tweet",
        d6c8514a: "Retweeter",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") a tweeté : "+e.tweet',
        d6917e0d: 'return"Voir "+e.count+" Tweet"+s(e.count,"","s")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    ga: {
        f70a36d0: "Tweetáil gach rud",
        d25289b4: "Atweetáilte ag",
        bab1f8b0: "Tweetanna",
        h99e9c95: 'return["Rinne "," Atweetáil"]',
        d2c7a41c: "Tweetáil do Fhreagra",
        bd7c0390: "Luaigh Tvuíteanna",
        bea869b4: "Tweet",
        d17df548: "Freagair",
        e349147c: "Cad atá ag tarlú?",
        fa9ce7f4: "Cuir an Atweet ar ceal",
        c9d7235e: "Cuir Ráiteas Leis",
        d6c8514a: "Atweetáil",
        e2414184: null,
        e2414185: null,
        hb7b0ceb: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d91695cb: null,
        d6917e0c: null,
        d6917e0d: null,
    },
    gl: {
        f70a36d0: "Chiar todo",
        d25289b4: "Rechouchiado por",
        bab1f8b0: "Chíos",
        h99e9c95: 'return[""," rechouchiou"]',
        d2c7a41c: "Chía a túa resposta",
        e2414184: 'return"Quote Tweet"+r(e.count,"","s")',
        hb7b0cea: 'return e.retweetCount+" rechouchío"+t(e.retweetCount,"","s")',
        bd7c039f: "Chíos citados",
        bea869b3: "Chío",
        hdf72269: "Responder",
        e349147b: "Que está a pasar?",
        f3bbbb87: "Desfacer rechouchío",
        c9d7235d: "Citar chío",
        d6c85149: "Rechouchiar",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") chiou:\\n"+e.tweet',
        d6917e0c: 'return"Show "+e.count+" Tweet"+r(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    gu: {
        f70a36d0: "બધાને ટ્વીટ કરો",
        d25289b4: "આમની દ્વારા પુનટ્વીટ કરવામાં આવી",
        bab1f8b0: "ટ્વીટ્સ",
        h99e9c95: 'return["","એ પુનટ્વીટ કરી"]',
        d2c7a41c: "તમારા પ્રત્યુતરને ટ્વીટ કરો",
        e2414184: 'return"અવતરણની સાથે ટ્વીટ"+n(e.count," કરો","્સ")',
        hb7b0cea: 'return e.retweetCount+" પુનટ્વીટ"+n(e.retweetCount,"","્સ")',
        bd7c039f: "અવતરણની સાથે ટ્વીટ્સ",
        bea869b3: "ટ્વીટ",
        hdf72269: "પ્રત્યુતર",
        e349147b: "શું ચાલી રહ્યું છે?",
        f3bbbb87: "પુનટ્વીટને પૂર્વવત કરો",
        c9d7235d: "અવતરણની સાથે ટ્વીટ કરો",
        d6c85149: "પુનટ્વીટ",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") એ ટ્વીટ કરી: "+e.tweet',
        d6917e0c: 'return"બતાવો "+e.count+" ટ્વીટ"+n(e.count,"","્સ")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    he: {
        f70a36d0: "צייץ הכל",
        d25289b4: "צויץ מחדש על־ידי",
        bab1f8b0: "ציוצים",
        h99e9c95: 'return[""," צייץ מחדש"]',
        d2c7a41c: "צייץ את התשובה שלך",
        e2414184: 'return"צי"+c(e.count,"וץ ציטוט","טוט ציוץ","וץ ציטוט","וץ ציטוט")',
        hb7b0cea: 'return e.retweetCount+" ציו"+c(e.retweetCount,"צים","ץ","צים","צים")+" מחדש"',
        bd7c039f: "ציוצי ציטוט",
        bea869b3: "צייץ",
        hdf72269: "השב",
        e349147b: "מה קורה?",
        f3bbbb87: "ביטול ציוץ מחדש",
        c9d7235d: "ציטוט ציוץ",
        d6c85149: "צייץ מחדש",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") צייץ: "+e.tweet',
        d6917e0c: 'return"הצג "+e.count+" ציו"+c(e.count,"צים","ץ","צים","צים")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    hi: {
        f70a36d0: "सभी ट्वीट करें",
        d25289b4: "इनके द्वारा रीट्वीट किया गया",
        bab1f8b0: "ट्वीट",
        h99e9c95: 'return[""," ने रीट्वीट किया"]',
        d2c7a41c: "अपना जवाब ट्वीट करें",
        e2414185: 'return"कोट ट्वीट"+n(e.count,"","्स")',
        hb7b0ceb: 'return e.retweetCount+" रीट्वीट"+n(e.retweetCount,"","्स")',
        bd7c0390: "कोट ट्वीट्स",
        bea869b4: "ट्वीट करें",
        d17df548: "जवाब दें",
        e349147c: "क्या हो रहा है?",
        fa9ce7f4: "रीट्वीट को पूर्ववत करें",
        c9d7235e: "ट्वीट क्वोट करें",
        d6c8514a: "रीट्वीट करें",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") ने ट्वीट किया: "+e.tweet',
        d6917e0d: 'return e.count+" ट्वीट"+n(e.count,"","्स")+" दिखाएं"',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    hr: {
        f70a36d0: "Tweetaj sve",
        d25289b4: "Korisnici koji su proslijedili Tweet",
        bab1f8b0: "Tweetovi",
        h99e9c95: 'return[""," proslijedio/la je Tweet"]',
        d2c7a41c: "Pošalji Tweet s odgovorom",
        e2414185: 'return""+t(e.count,"citirana tweeta","Citiraj Tweet","citiranih tweetova")',
        hb7b0ceb: 'return e.retweetCount+" proslijeđen"+t(e.retweetCount,"a tweeta","i Tweet","ih tweetova")',
        bd7c0390: "Citirani tweetovi",
        bea869b4: "Tweet",
        d17df548: "Odgovori",
        e349147c: "Što se događa?",
        fa9ce7f4: "Poništi prosljeđivanje tweeta",
        c9d7235e: "Citiraj Tweet",
        d6c8514a: "Proslijedi tweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") objavio/la je Tweet: "+e.tweet',
        d6917e0d: 'return"Prikaži "+e.count+" "+t(e.count,"tweeta","Tweet","tweetova")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    hu: {
        f70a36d0: "Tweet küldése mindenkinek",
        d25289b4: "Retweetelte",
        bab1f8b0: "Tweetek",
        h99e9c95: 'return[""," Retweetelte"]',
        d2c7a41c: "Tweeteld válaszodat",
        e2414185: 'return"Tweet"+n(e.count," idézése","-idézés")',
        hb7b0ceb: 'return e.retweetCount+" Retweet"',
        bd7c0390: "Tweet-idézések",
        bea869b4: "Tweetelj",
        d17df548: "Válasz",
        e349147c: "Mi történik éppen most?",
        fa9ce7f4: "Retweet visszavonása",
        c9d7235e: "Tweet idézése",
        d6c8514a: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") tweetelte: "+e.tweet',
        d6917e0d: 'return e.count+" Tweet megjelenítése"',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    id: {
        f70a36d0: "Tweet semua",
        d25289b4: "Di-retweet oleh",
        bab1f8b0: "Tweet",
        h99e9c95: 'return[""," me-retweet"]',
        d2c7a41c: "Tweet balasan Anda",
        bd7c039f: "Tweet Kutipan",
        bea869b3: "Tweet",
        hdf72269: "Balas",
        e349147b: "Apa yang sedang terjadi?",
        f3bbbb87: "Batalkan Retweet",
        c9d7235d: "Kutip Tweet",
        d6c85149: "Retweet",
        e2414184: null,
        e2414185: null,
        hb7b0ceb: null,
        hb7b0cea: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d91695cb: null,
        d6917e0c: null,
        d6917e0d: null,
    },
    it: {
        f70a36d0: "Twitta tutto",
        d25289b4: "Ritwittato da",
        bab1f8b0: "Tweet",
        h99e9c95: 'return[""," ha ritwittato"]',
        d2c7a41c: "Twitta la tua risposta",
        e2414184: 'return"Tweet di citazione"',
        hb7b0cea: 'return e.retweetCount+" Retweet"',
        bd7c039f: "Tweet di citazione",
        bea869b3: "Twitta",
        hdf72269: "Rispondi",
        e349147b: "Che c'è di nuovo?",
        f3bbbb87: "Annulla Retweet",
        c9d7235d: "Cita Tweet",
        d6c85149: "Ritwitta",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") ha twittato: "+e.tweet',
        d6917e0c: 'return"Mostra "+e.count+" Tweet"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ja: {
        f70a36d0: "すべてツイート",
        d25289b4: "リツイートしたユーザー",
        bab1f8b0: "ツイート",
        h99e9c95: 'return["","さんがリツイート"]',
        d2c7a41c: "返信をツイート",
        e2414184: 'return"件の引用ツイート"',
        hb7b0cea: 'return e.retweetCount+" 件のリツイート"',
        bd7c039f: "引用ツイート",
        bea869b3: "ツイートする",
        hdf72269: "返信",
        e349147b: "いまどうしてる?",
        f3bbbb87: "リツイートを取り消す",
        c9d7235d: "引用ツイート",
        d6c85149: "リツイート",
        d91695cb: 'return e.fullName+"(@"+e.screenName+")さんがツイートしました: "+e.tweet',
        d6917e0c: 'return e.count+" 件のツイートを表示"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    kn: {
        f70a36d0: "ಎಲ್ಲಾ ಟ್ವೀಟ್ ಮಾಡಿ",
        d25289b4: "ಮರುಟ್ವೀಟಿಸಿದವರು",
        bab1f8b0: "ಟ್ವೀಟ್‌ಗಳು",
        h99e9c95: 'return[""," ಅವರು ಮರುಟ್ವೀಟಿಸಿದ್ದಾರೆ"]',
        d2c7a41c: "ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಟ್ವೀಟ್ ಮಾಡಿ",
        e2414185: 'return""+n(e.count,"ಟ್ವೀಟ್ ಕೋಟ್ ಮಾಡಿ","ಕೋಟ್ ಟ್ವೀಟ್‌ಗಳು")',
        hb7b0ceb: 'return e.retweetCount+" ಮರುಟ್ವೀಟ"+n(e.retweetCount,"ಿಸಿ","್‌ಗಳು")',
        bd7c0390: "ಕೋಟ್ ಟ್ವೀಟ್‌ಗಳು",
        bea869b4: "ಟ್ವೀಟ್",
        d17df548: "ಪ್ರತಿಕ್ರಿಯಿಸಿ",
        e349147c: "ಏನಾಗುತ್ತಿದೆ?",
        fa9ce7f4: "ಮರುಟ್ವೀಟಿಸುವುದನ್ನು ರದ್ದುಮಾಡಿ",
        c9d7235e: "ಟ್ವೀಟ್ ಕೋಟ್ ಮಾಡಿ",
        d6c8514a: "ಮರುಟ್ವೀಟಿಸಿ",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return"ತೋರಿಸಿ "+e.count+" ಟ್ವೀಟ್"+n(e.count,"","‌ಗಳು")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    ko: {
        f70a36d0: "모두 트윗하기",
        d25289b4: "리트윗함",
        bab1f8b0: "트윗",
        h99e9c95: 'return[""," 님이 리트윗함"]',
        d2c7a41c: "내 답글을 트윗합니다.",
        e2414184: 'return"인용한 트윗"',
        hb7b0cea: 'return e.retweetCount+" 리트윗"',
        bd7c039f: "트윗 인용하기",
        bea869b3: "트윗",
        hdf72269: "답글",
        e349147b: "무슨 일이 일어나고 있나요?",
        f3bbbb87: "리트윗 취소",
        c9d7235d: "트윗 인용하기",
        d6c85149: "리트윗",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0c: 'return"보기 "+e.count+" 트윗"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    mr: {
        f70a36d0: "सर्व ट्विट करा",
        d25289b4: "यांनी पुन्हा ट्विट केले",
        bab1f8b0: "ट्विट्स",
        h99e9c95: 'return[""," यांनी पुन्हा ट्विट केले"]',
        d2c7a41c: "आपल्या प्रत्युत्तरावर ट्विट करा",
        e2414184: 'return""+r(e.count,"ट्विट वर भाष्य करा","भाष्य ट्विट्स")',
        hb7b0cea: 'return e.retweetCount+" पुन"+r(e.retweetCount,"्हा ट्विट करा","र्ट्विट्स")',
        bd7c039f: "भाष्य ट्विट्स",
        bea869b3: "ट्विट",
        hdf72269: "प्रत्युत्तर",
        e349147b: "काय घडत आहे?",
        f3bbbb87: "पुनर्ट्विट पूर्ववत करा",
        c9d7235d: "ट्विट वर भाष्य करा",
        d6c85149: "पुन्हा ट्विट",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") यांनी ट्विट केले: "+e.tweet',
        d6917e0c: 'return e.count+" ट्विट"+r(e.count,"","्स")+" दाखवा"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ms: {
        f70a36d0: "Tweet semua",
        d25289b4: "Ditweet semula oleh",
        bab1f8b0: "Tweet",
        h99e9c95: 'return[""," telah Tweet semula"]',
        d2c7a41c: "Tweet balasan anda",
        bd7c039f: "Tweet Petikan",
        bea869b3: "Tweet",
        hdf72269: "Balas",
        e349147b: "Apakah yang sedang berlaku?",
        f3bbbb87: "Buat asal Tweet semula",
        c9d7235d: "Petik Tweet",
        d6c85149: "Tweet semula",
        e2414184: null,
        e2414185: null,
        hb7b0ceb: null,
        hb7b0cea: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d91695cb: null,
        d6917e0c: null,
        d6917e0d: null,
    },
    nb: {
        f70a36d0: "Tweet alle",
        d25289b4: "Retweetet av",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," retweetet"]',
        d2c7a41c: "Tweet svaret ditt",
        e2414185: 'return"sitat-Tweet"+i(e.count,"","s")',
        hb7b0ceb: 'return e.retweetCount+" Retweet"+i(e.retweetCount,"","s")',
        bd7c0390: "Sitat-Tweets",
        bea869b4: "Tweet",
        d17df548: "Svar",
        e349147c: "Hva skjer?",
        fa9ce7f4: "Angre Retweet",
        c9d7235e: "Sitat-Tweet",
        d6c8514a: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweetet: "+e.tweet',
        d6917e0d: 'return"Vis "+e.count+" Tweet"+i(e.count,"","s")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    nl: {
        f70a36d0: "Alles tweeten",
        d25289b4: "Geretweet door",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," heeft geretweet"]',
        d2c7a41c: "Je antwoord tweeten",
        e2414185: 'return""+r(e.count,"Citeer Tweet","Geciteerde Tweets")',
        hb7b0ceb: 'return e.retweetCount+" Retweet"+r(e.retweetCount,"","s")',
        bd7c0390: "Geciteerde Tweets",
        bea869b4: "Tweeten",
        d17df548: "Beantwoorden",
        e349147c: "Wat houdt je bezig?",
        fa9ce7f4: "Retweet ongedaan maken",
        c9d7235e: "Citeer Tweet",
        d6c8514a: "Retweeten",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return e.count+" Tweet"+r(e.count,"","s")+" weergeven"',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    pl: {
        f70a36d0: "Tweetnij wszystko",
        d25289b4: "Podane dalej przez",
        bab1f8b0: "Tweety",
        h99e9c95: 'return[""," podał/a dalej Tweeta"]',
        d2c7a41c: "Wyślij Tweeta z odpowiedzią",
        e2414184: 'return"Cyt"+n(e.count,"aty z","atów z","uj","atów z")+" Tweeta"',
        hb7b0cea: 'return e.retweetCount+" Tweet"+n(e.retweetCount,"y podane","ów podanych"," podany","ów podanych")+" dalej"',
        bd7c039f: "Cytatów z Tweeta",
        bea869b3: "Tweet",
        hdf72269: "Odpowiedz",
        e349147b: "Co się dzieje?",
        f3bbbb87: "Cofnij podanie dalej",
        c9d7235d: "Cytuj Tweeta",
        d6c85149: "Podaj dalej",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Napisał/a: "+e.tweet',
        d6917e0c: 'return"Pokaż "+e.count+" Tweet"+n(e.count,"y","ów","a","ów")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    pt: {
        f70a36d0: "Tweetar tudo",
        d25289b4: "Retweetado por",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," retweetou"]',
        d2c7a41c: "Tweete sua resposta",
        e2414184: 'return"Tweet"+r(e.count,"","s")+" de comentário"',
        hb7b0cea: 'return e.retweetCount+" Retweet"+r(e.retweetCount,"","s")',
        bd7c039f: "Tweets com comentário",
        bea869b3: "Tweetar",
        hdf72269: "Responder",
        e349147b: "O que está acontecendo?",
        f3bbbb87: "Desfazer Retweet",
        c9d7235d: "Citar Tweet",
        d6c85149: "Retweetar",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") tweetou: "+e.tweet',
        d6917e0c: 'return"Mostrar "+e.count+" Tweet"+r(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ro: {
        f70a36d0: "Dă Tweeturi cu tot",
        d25289b4: "Redistribuit de către",
        bab1f8b0: "Tweeturi",
        h99e9c95: 'return[""," a redistribuit"]',
        d2c7a41c: "Dă un Tweet cu răspunsul",
        e2414184: 'return""+r(e.count,"Tweeturi cu citat","Tweet cu citat","de Tweeturi cu citate")',
        hb7b0cea: 'return e.retweetCount+" "+r(e.retweetCount,"Retweeturi","Retweet","de Retweeturi")',
        bd7c039f: "Tweeturi cu citat",
        bea869b3: "Tweet",
        hdf72269: "Răspunde",
        e349147b: "Ce se întâmplă?",
        f3bbbb87: "Anulează Retweetul",
        c9d7235d: "Citează Tweetul",
        d6c85149: "Redistribuie",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") a dat Tweetul: "+e.tweet',
        d6917e0c: 'return"Afișează "+e.count+" "+r(e.count,"Tweeturi","Dă Tweet","Tweeturi")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ru: {
        f70a36d0: "Твитнуть все",
        d25289b4: "Ретвитнул(а)",
        bab1f8b0: "Твиты",
        h99e9c95: 'return[""," ретвитнул(а)"]',
        d2c7a41c: "Твитнуть в ответ",
        e2414184: 'return""+n(e.count,"твита с цитатами","твитов с цитатами","Цитировать твит","Твиты с цитатами")',
        hb7b0cea: 'return e.retweetCount+" ретвит"+n(e.retweetCount,"а","ов","","а")',
        bd7c039f: "Твиты с цитатами",
        bea869b3: "Твитнуть",
        hdf72269: "Ответить",
        e349147b: "Что происходит?",
        f3bbbb87: "Отменить ретвит",
        c9d7235d: "Цитировать",
        d6c85149: "Ретвитнуть",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") твитнул(а): "+e.tweet',
        d6917e0c: 'return"Показать "+e.count+" твит"+n(e.count,"а","ов","","а")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    sr: {
        f70a36d0: "Твитуј све",
        d25289b4: "Ретвитовано од стране",
        bab1f8b0: "Твитови",
        h99e9c95: 'return[""," ретвитује"]',
        d2c7a41c: "Твитуј свој одговор",
        e2414185: 'return"твит"+n(e.count,"а","","(ов)а")+" са цитатом"',
        hb7b0ceb: 'return e.retweetCount+" ретвит"+n(e.retweetCount,"а","","ова")',
        bd7c0390: "твит(ов)а са цитатом",
        bea869b4: "Твитуј",
        d17df548: "Одговори",
        e349147c: "Шта се дешава?",
        fa9ce7f4: "Опозови ретвит",
        c9d7235e: "твит са цитатом",
        d6c8514a: "Ретвитуј",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return"Прикажи "+e.count+" твит"+n(e.count,"а","","ова")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    sk: {
        f70a36d0: "Tweetnuť všetko",
        d25289b4: "Retweetnuté používateľom",
        bab1f8b0: "Tweety",
        h99e9c95: 'return["Používateľ "," retweetol"]',
        d2c7a41c: "Tweetnuť odpoveď",
        e2414184: 'return"Tweet"+n(e.count,"y","u","","y")+" s citátom"',
        hb7b0cea: 'return e.retweetCount+" retweet"+n(e.retweetCount,"y","u","","ov")',
        bd7c039f: "Tweety s citátom",
        bea869b3: "Tweetnuť",
        hdf72269: "Odpovedať",
        e349147b: "Čo sa deje?",
        f3bbbb87: "Zrušiť retweet",
        c9d7235d: "Tweet s citátom",
        d6c85149: "Retweetnuť",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0c: 'return"Zobraziť "+e.count+" Tweet"+n(e.count,"y","u","","ov")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    sv: {
        f70a36d0: "Tweeta allt",
        d25289b4: "Retweetad av",
        bab1f8b0: "Tweets",
        h99e9c95: 'return[""," Retweetade"]',
        d2c7a41c: "Tweeta ditt svar",
        e2414184: 'return"citat-tweet"+r(e.count,"","s")',
        hb7b0cea: 'return e.retweetCount+" Retweet"+r(e.retweetCount,"","s")',
        bd7c039f: "Citat-tweets",
        bea869b3: "Tweeta",
        hdf72269: "Svara",
        e349147b: "Vad händer?",
        f3bbbb87: "Ångra retweeten",
        c9d7235d: "Citera Tweet",
        d6c85149: "Retweeta",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweetade: "+e.tweet',
        d6917e0c: 'return"Visa "+e.count+" Tweet"+r(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    ta: {
        f70a36d0: "அனைத்தையும் ட்விட் செய்",
        d25289b4: "இவரால் மறுட்விட் செய்யப்பட்டது",
        bab1f8b0: "கீச்சுகள்",
        h99e9c95: 'return[""," மறுட்வீட் செய்துள்ளார்"]',
        d2c7a41c: "உங்கள் பதிலை ட்விட் செய்யவும்",
        e2414185: 'return""+n(e.count,"ட்விட்டை மேற்கோள் காட்டு","மேற்கோள் கீச்சுகள்")',
        hb7b0ceb: 'return e.retweetCount+" மறுகீச்சு"+n(e.retweetCount,"","கள்")',
        bd7c0390: "மேற்கோள் கீச்சுகள்",
        bea869b4: "ட்விட் செய்",
        d17df548: "பதிலளி",
        e349147c: "என்ன நிகழ்கிறது?",
        fa9ce7f4: "மறுகீச்சை செயல்தவிர்",
        c9d7235e: "ட்விட்டை மேற்கோள் காட்டு",
        d6c8514a: "மறுட்விட் செய்",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return e.count+" கீச்சு"+n(e.count,"","கள்")+"-ஐக் காண்பி"',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    th: {
        f70a36d0: "ทวีตทั้งหมด",
        d25289b4: "ถูกรีทวีตโดย",
        bab1f8b0: "ทวีต",
        h99e9c95: 'return[""," รีทวีต"]',
        d2c7a41c: "ทวีตการตอบกลับของคุณ",
        e2414185: 'return"ทวีตและคำพูด"',
        hb7b0ceb: 'return e.retweetCount+" รีทวีต"',
        bd7c0390: "ทวีตและคำพูด",
        bea869b4: "ทวีต",
        d17df548: "ตอบกลับ",
        e349147c: "มีอะไรเกิดขึ้นบ้าง",
        fa9ce7f4: "ยกเลิกการรีทวีต",
        c9d7235e: "อ้างอิงทวีต",
        d6c8514a: "รีทวีต",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return"แสดง "+e.count+" ทวีต"',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    tr: {
        f70a36d0: "Hepsini Tweetle",
        d25289b4: "Retweetleyen(ler):",
        bab1f8b0: "Tweetler",
        h99e9c95: 'return[""," Retweetledi"]',
        d2c7a41c: "Yanıtını Tweetle",
        e2414184: 'return"Alıntı Tweet"+r(e.count,"","ler")',
        hb7b0cea: 'return e.retweetCount+" Retweet"',
        bd7c039f: "Alıntı Tweetler",
        bea869b3: "Tweetle",
        hdf72269: "Yanıtla",
        e349147b: "Neler oluyor?",
        f3bbbb87: "Retweeti Geri Al",
        c9d7235d: "Tweeti Alıntıla",
        d6c85149: "Retweet",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweetledi: "+e.tweet',
        d6917e0c: 'return"Göster "+e.count+" Tweet"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    uk: {
        f70a36d0: "Твітнути все",
        d25289b4: "Ретвіти",
        bab1f8b0: "Твіти",
        h99e9c95: 'return[""," ретвітнув(ла)"]',
        d2c7a41c: "Твітніть відповідь",
        e2414185: 'return"цитован"+n(e.count,"і твіти","их твітів","ий твіт","ого твіта")',
        hb7b0ceb: 'return e.retweetCount+" ретвіт"+n(e.retweetCount,"и","ів","","а")',
        bd7c0390: "Цитовані твіти",
        bea869b4: "Твіт",
        d17df548: "Відповісти",
        e349147c: "Що відбувається?",
        fa9ce7f4: "Скасувати ретвіт",
        c9d7235e: "Цитувати твіт",
        d6c8514a: "Ретвітнути",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") Tweeted:\\n"+e.tweet',
        d6917e0d: 'return"Показати "+e.count+" твіт"+n(e.count,"и","ів","","а")',
        e2414184: null,
        hb7b0cea: null,
        bd7c039f: null,
        bea869b3: null,
        hdf72269: null,
        e349147b: null,
        f3bbbb87: null,
        c9d7235d: null,
        d6c85149: null,
        d6917e0c: null,
    },
    ur: {
        f70a36d0: "سب کو ٹویٹ کریں",
        d25289b4: "ریٹویٹ منجانب",
        bab1f8b0: "ٹویٹس",
        h99e9c95: 'return[""," نے ریٹویٹ کیا"]',
        d2c7a41c: "اپنا جواب ٹویٹ کریں",
        e2414184: 'return"Quote Tweet"+o(e.count,"","s")',
        hb7b0cea: 'return e.retweetCount+" ریٹویٹ"',
        bd7c039f: "ٹویٹ کو نقل کرو",
        bea869b3: "ٹویٹ کریں",
        hdf72269: "جواب دیں",
        e349147b: "کیا ہو رہا ہے؟",
        f3bbbb87: "ریٹویٹ کالعدم کریں",
        c9d7235d: "ٹویٹ اقتباس کریں",
        d6c85149: "ریٹویٹ",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") نے ٹویٹ کی: "+e.tweet',
        d6917e0c: 'return"Show "+e.count+" Tweet"+o(e.count,"","s")',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    vi: {
        f70a36d0: "Đăng Tweet tất cả",
        d25289b4: "Được Tweet lại bởi",
        bab1f8b0: "Tweet",
        h99e9c95: 'return[""," đã Tweet lại"]',
        d2c7a41c: "Tweet trả lời của bạn",
        bd7c039f: "Tweet trích dẫn",
        hdf72269: "Trả lời",
        e349147b: "Chuyện gì đang xảy ra?",
        f3bbbb87: "Hoàn tác Tweet lại",
        c9d7235d: "Trích dẫn Tweet",
        d6c85149: "Tweet lại",
        e2414184: null,
        e2414185: null,
        hb7b0ceb: null,
        hb7b0cea: null,
        bd7c0390: null,
        bea869b4: null,
        bea869b3: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d91695cb: null,
        d6917e0c: null,
        d6917e0d: null,
    },
    "zh-Hant": {
        f70a36d0: "推全部內容",
        d25289b4: "已被轉推",
        bab1f8b0: "推文",
        h99e9c95: 'return[""," 已轉推"]',
        d2c7a41c: "推你的回覆",
        e2414184: 'return"引用的推文"',
        hb7b0cea: 'return e.retweetCount+" 則轉推"',
        bd7c039f: "引用的推文",
        bea869b3: "推文",
        hdf72269: "回覆",
        e349147b: "有什麼新鮮事?",
        f3bbbb87: "取消轉推",
        c9d7235d: "引用推文",
        d6c85149: "轉推",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") 已推文:"+e.tweet',
        d6917e0c: 'return"顯示 "+e.count+" 則推文"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
    zh: {
        f70a36d0: "全部发推",
        d25289b4: "转推者",
        bab1f8b0: "推文",
        h99e9c95: 'return[""," 转推了"]',
        d2c7a41c: "发布你的回复",
        e2414184: 'return"引用推文"',
        hb7b0cea: 'return e.retweetCount+" 转推"',
        bd7c039f: "引用推文",
        bea869b3: "推文",
        hdf72269: "回复",
        e349147b: "有什么新鲜事?",
        f3bbbb87: "撤销转推",
        c9d7235d: "引用推文",
        d6c85149: "转推",
        d91695cb: 'return e.fullName+" (@"+e.screenName+") 发推说:"+e.tweet',
        d6917e0c: 'return"显示 "+e.count+" 推文"',
        e2414185: null,
        hb7b0ceb: null,
        bd7c0390: null,
        bea869b4: null,
        d17df548: null,
        e349147c: null,
        fa9ce7f4: null,
        c9d7235e: null,
        d6c8514a: null,
        d6917e0d: null,
    },
};

function header(messages) {
    const header = document.querySelector(`h2[dir="ltr"]:not(#modal-header) > span`);
    const toTweet = messages.bea869b3 !== null ? messages.bea869b3 : messages.bea869b4;
    const quoteTweet = messages.c9d7235d !== null ? messages.c9d7235d : messages.bd7c0390;
    const splitPath = location.pathname.split("/");
    if (header !== null) {
        if (splitPath[2] === "status" && splitPath[4] !== "photo") {
            if (splitPath[4] === "retweets" && splitPath[5] === "with_comments") {
                if (header.textContent !== quoteTweet) {
                    header.textContent = quoteTweet;
                }
            }
            else {
                if (header.textContent !== toTweet) {
                    header.textContent = toTweet;
                }
            }
        }
    }
}

/**
 * プロフィールのタブのツイート
 */
function profileTweets(messages) {
    const tweets = messages.bab1f8b0;
    const profileTabPost = document.querySelector('div[role="tablist"] > div[role="presentation"]:nth-child(1) > a > div > div > span');
    const isProfilePage = document.querySelector('div[data-testid="UserProfileHeader_Items"]') !==
        null;
    if (profileTabPost !== null &&
        profileTabPost.textContent !== tweets &&
        isProfilePage) {
        setTimeout(() => {
            if (document.querySelector(`script[data-testid="UserProfileSchema-test"]`) !== null) {
                profileTabPost.textContent = tweets;
            }
        });
    }
}

function quoteCounter(messages) {
    const counterLinks = document.querySelectorAll("article > div > div > div:nth-child(3) > div:nth-child(5) > div > a");
    let splitRetweets = null;
    if (messages.e2414184 !== null) {
        splitRetweets = messages.e2414184.split('"');
    }
    else if (messages.e2414185 !== null) {
        splitRetweets = messages.e2414185.split('"');
    }
    if (splitRetweets === null) {
        throw log(new Error("Can't get retweet's language messages!"));
    }
    const quote = splitRetweets[1].trim() +
        (splitRetweets[5] !== undefined ? splitRetweets[5] : "");
    counterLinks.forEach((counterLink) => {
        const hrefSplit = counterLink.href.split("/");
        if (hrefSplit[4] === "retweets" && hrefSplit[5] === "with_comments") {
            const counter = counterLink.querySelector("a > span > span");
            if (counter !== null) {
                if (counter.textContent !== quote) {
                    counter.textContent = quote;
                }
            }
        }
    });
}

/**
 * 返信をツイート
 */
function replyDraftEditorPlaceholder(messages) {
    const whatsHappen = messages.e349147c !== null ? messages.e349147c : messages.e349147b;
    const placeholder = document.querySelector(`.public-DraftEditorPlaceholder-inner`);
    // mobile
    const placeholderTextArea = document.querySelector(`textarea[data-testid="tweetTextarea_0"]`);
    if (placeholder !== null) {
        if (location.pathname !== "/home" &&
            location.pathname !== "/compose/tweet") {
            if (placeholder.textContent !== messages.d2c7a41c) {
                placeholder.textContent = messages.d2c7a41c;
            }
        }
        else {
            if (placeholder.textContent !== whatsHappen) {
                placeholder.textContent = whatsHappen;
            }
        }
    }
    if (placeholderTextArea !== null) {
        if (location.pathname !== "/home" &&
            location.pathname !== "/compose/tweet") {
            if (placeholderTextArea.getAttribute("placeholder") !== messages.d2c7a41c) {
                placeholderTextArea.placeholder =
                    whatsHappen === null ? "" : whatsHappen;
            }
        }
    }
}

/**
 * Retweet button, Quote button.
 */
function retweetBtn(messages) {
    const retweetBtns = document.querySelectorAll('div[data-testid="retweetConfirm"] > div:nth-child(2) > div > span:not(.x-to-twitter-retweet)');
    const quoteBtns = document.querySelectorAll('a[href="/compose/tweet"] > div:nth-child(2) > div > span:not(.x-to-twitter-retweet)');
    const unRetweetBtns = document.querySelectorAll('div[data-testid="unretweetConfirm"] > div:nth-child(2) > div > span:not(.x-to-twitter-retweet)');
    const toRetweet = messages.d6c8514a !== null ? messages.d6c8514a : messages.d6c85149;
    const toQuote = messages.c9d7235d !== null ? messages.c9d7235d : messages.c9d7235e;
    const undoRetweet = messages.f3bbbb87 !== null ? messages.f3bbbb87 : messages.fa9ce7f4;
    retweetBtns.forEach((retweetBtn) => {
        retweetBtn.classList.add("x-to-twitter-retweet");
        retweetBtn.textContent = toRetweet;
    });
    quoteBtns.forEach((quoteBtn) => {
        quoteBtn.classList.add("x-to-twitter-retweet");
        quoteBtn.textContent = toQuote;
    });
    unRetweetBtns.forEach((unRetweetBtn) => {
        unRetweetBtn.classList.add("x-to-twitter-retweet");
        unRetweetBtn.textContent = undoRetweet;
    });
}

/**
 * Retweet counter
 */
function retweetCounter(messages) {
    const counterLinks = document.querySelectorAll("article > div > div > div:nth-child(3) > div:nth-child(5) > div > a");
    let splitRetweets = null;
    if (messages.hb7b0cea !== null) {
        splitRetweets = messages.hb7b0cea.split('"');
    }
    else if (messages.hb7b0ceb !== null) {
        splitRetweets = messages.hb7b0ceb.split('"');
    }
    if (splitRetweets === null) {
        throw log(new Error("Can't get retweet's language messages!"));
    }
    const retweet = splitRetweets[1].trim() +
        (splitRetweets[5] !== undefined ? splitRetweets[5] : "");
    counterLinks.forEach((counterLink) => {
        const hrefSplit = counterLink.href.split("/");
        if (hrefSplit[4] === "retweets" && hrefSplit[5] === undefined) {
            const counter = counterLink.querySelector("a > span > span");
            if (counter !== null) {
                if (counter.textContent !== retweet) {
                    counter.textContent = retweet;
                }
            }
        }
    });
}

/**
 * リポストしました
 */
function retweeted(messages) {
    const retweetedMessage = messages.h99e9c95;
    if (retweetedMessage === null) {
        throw log(new Error("Can't get Retweeted's i18n!"));
    }
    const retweeted = retweetedMessage.split('"')[3];
    const retweetedSpans = document.querySelectorAll(`article span[data-testid="socialContext"]:not(.x-to-twitter-retweeted)`);
    retweetedSpans.forEach((retweetedSpan) => {
        retweetedSpan.classList.add("x-to-twitter-retweeted");
        if (retweetedSpan.childNodes[2] !== undefined) {
            retweetedSpan.childNodes[2].textContent = retweeted;
        }
    });
}

function retweetedByPopup(messages) {
    const header = document.querySelector(`h2[dir="ltr"]#modal-header > span`);
    const splitPath = location.pathname.split("/");
    const retweetedBy = messages.d25289b4;
    if (header !== null &&
        splitPath[4] === "retweets" &&
        header.textContent !== retweetedBy) {
        header.textContent = retweetedBy;
    }
}

/**
 * Tweet button in sidemenu.
 */
function sideNavNewTweetButton(messages) {
    const tweetButton = document.querySelector('a[data-testid="SideNav_NewTweet_Button"] > div > span > div > div > span > span');
    const toTweet = messages.bea869b3 !== null ? messages.bea869b3 : messages.bea869b4;
    if (tweetButton !== null) {
        if (tweetButton.textContent !== null) {
            if (tweetButton.textContent !== toTweet) {
                tweetButton.textContent = toTweet;
            }
        }
        else {
            tweetButton.textContent = toTweet;
        }
    }
}

/**
 * 上の「件のツイートを表示」
 */
function topCountTweets(messages) {
    const showEPostsElem = document.querySelector(`div[data-testid="cellInnerDiv"] > div > button[role="button"] > div > div > span`);
    const showEPostsMessages = messages.d6917e0c !== null ? messages.d6917e0c : messages.d6917e0d;
    if (showEPostsMessages === null) {
        throw log(new Error("showEPostsMessages not found"));
    }
    const splitShowEPosts = showEPostsMessages.split('"');
    if (showEPostsElem !== null) {
        const parent = showEPostsElem.parentElement.parentElement.parentElement
            .parentElement.parentElement;
        if (parent === undefined || parent === null) {
            throw log(new Error("parent not found"));
        }
        const key = Object.keys(parent).filter((key) => {
            return key.match(/^__reactProps\$/);
        })[0];
        const count = parent[key].children._owner.memoizedProps.item.data.content.count;
        const showEPosts = count +
            " " +
            splitShowEPosts[1].trim() +
            (splitShowEPosts[5] !== undefined ? splitShowEPosts[5] : "");
        if (showEPostsElem.textContent !== showEPosts) {
            showEPostsElem.textContent = showEPosts;
        }
    }
}

/**
 * Tweet button
 * @param messages
 */
function tweetButton(messages) {
    const tweetButton = document.querySelector('button[data-testid="tweetButton"] > div > span > span');
    const tweetAll = messages.f70a36d0;
    const toTweet = messages.bea869b3 !== null ? messages.bea869b3 : messages.bea869b4;
    const reply = messages.hdf72269 !== null ? messages.hdf72269 : messages.d17df548;
    if (tweetButton !== null) {
        const pathSplited = location.pathname.split("/");
        if (pathSplited[2] === "status" && pathSplited[4] === "photo") {
            /**
             * If in photo page, tweetbutton will be replay button.
             */
            if (tweetButton.textContent !== reply) {
                tweetButton.textContent = reply;
            }
        }
        else {
            const isTweetAll = document.querySelector('label[data-testid="tweetTextarea_1_label"]') !==
                null;
            if (isTweetAll) {
                if (tweetButton.textContent !== tweetAll) {
                    tweetButton.textContent = tweetAll;
                }
            }
            else {
                if (tweetButton.textContent !== toTweet) {
                    tweetButton.textContent = toTweet;
                }
            }
        }
    }
}

/**
 * Small button to tweet.
 */
function tweetButtonInline(messages) {
    const tweetButton = document.querySelector('button[data-testid="tweetButtonInline"] > div > span > span');
    const toTweet = messages.bea869b3 !== null ? messages.bea869b3 : messages.bea869b4;
    const reply = messages.hdf72269 !== null ? messages.hdf72269 : messages.d17df548;
    if (tweetButton !== null) {
        if (location.pathname === "/home") {
            if (tweetButton.textContent !== toTweet) {
                tweetButton.textContent = toTweet;
            }
        }
        else {
            if (tweetButton.textContent !== reply) {
                tweetButton.textContent = reply;
            }
        }
    }
}

/**
 * 上から出てくるやつ
 * "さんがツイートしました"
 */
function tweetedPill(messages) {
    const tweetedMessage = messages.d91695cb;
    if (tweetedMessage === null) {
        throw log(new Error("Can't get tweeted's message"));
    }
    const tweeted = tweetedMessage
        .replaceAll(")", ")")
        .split(")")[1]
        .split(":")[0];
    const pill = document.querySelector(`div[data-testid="pillLabel"] > span > span > span`);
    if (pill !== null && pill.textContent !== tweeted) {
        pill.textContent = tweeted;
    }
}

const postToTweet = {
    selector: "body",
    callback: (_body) => {
        const language = getLang();
        const messages = i18n[language];
        sideNavNewTweetButton(messages);
        tweetButtonInline(messages);
        tweetButton(messages);
        replyDraftEditorPlaceholder(messages);
        retweetBtn(messages);
        retweetCounter(messages);
        header(messages);
        retweeted(messages);
        retweetedByPopup(messages);
        tweetedPill(messages);
        profileTweets(messages);
        quoteCounter(messages);
        topCountTweets(messages);
    },
};
/**
 * Get current language from cookie.
 * @returns
 */
function getLang() {
    const cookie = document.cookie;
    const cookieLang = cookie
        .split(";")
        .map((s) => s.split("="))
        .filter(([key, _value]) => {
        return key === " lang";
    })[0][1];
    if (Object.keys(i18n).includes(cookieLang)) {
        return cookieLang;
    }
    else if (cookieLang === "zh-cn") {
        return "zh";
    }
    else if (cookieLang === "zh-tw") {
        return "zh-Hant";
    }
    else if (cookieLang === "en-gb") {
        return "en-GB";
    }
    else {
        return "en";
    }
}

/**
 * Get running environment.
 * @returns
 */
function envChecker() {
    if (typeof GM_info !== "undefined") {
        log(GM_info);
        log(JSON.stringify(GM_info));
        if (GM_info.scriptHandler === "Userscripts") {
            return "userscript_ios";
        }
        if (typeof GM_info.userAgentData !== "undefined") {
            if (GM_info.userAgentData.platform === "Windows") {
                return "userscript_windows";
            }
        }
        return "userscript_not_windows";
    }
    else {
        return "extension";
    }
}
/**
 * Run a callback in no time when a head element is found.
 * @param {*} callback
 */
function headFinder(callback) {
    const observer = new MutationObserver((_mutations, obs) => {
        const head = document.querySelector("head");
        if (head) {
            callback(head);
            obs.disconnect();
        }
    });
    observer.observe(document.documentElement, {
        childList: true,
        subtree: true,
    });
}
/**
 * headが見つかったときの処理
 */
function headFound(head, observerHooksControler, env) {
    log("Head found");
    observerHooksControler.startObserve("head", {
        childList: true,
    });
    observerHooksControler.startObserve("title", {
        childList: true,
    });
    observerHooksControler.startObserve("body", {
        subtree: true,
        childList: true,
    });
    // wait rendering
    setTimeout(() => {
        log("Post To Tweet");
        if (env !== "extension") {
            getThemeColor().then((colorRGB) => {
                setThemeColor(colorRGB, head);
            });
        }
        if (document.body !== null) {
            observerHooksControler.startObserve("body", {
                subtree: true,
                childList: true,
            });
        }
    }, 100);
    styleInject(head, env);
}
function main() {
    log("X to Twitter");
    const env = envChecker();
    log(`Env: ${env}`);
    const observerHooksControler = new ObserverHooksControler();
    observerHooksControler.addHookHandler(faviconReplacer);
    observerHooksControler.addHookHandler(titleReplacer);
    observerHooksControler.addHookHandler(forSafari);
    observerHooksControler.addHookHandler(postToTweet);
    if (env === "extension") {
        headFinder((head) => {
            log(head);
            headFound(head, observerHooksControler, env);
            replaceManifest(head);
        });
    }
    else if (env === "userscript_ios" || env === "userscript_not_windows") {
        enableAlert();
        log(document.head);
        headFound(document.head, observerHooksControler, env);
    }
    else if (env === "userscript_windows") {
        headFinder((head) => {
            log(head);
            headFound(head, observerHooksControler, env);
        });
    }
}
main();