mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2024-12-27 15:00:22 +01:00
302 lines
18 KiB
HTML
302 lines
18 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Translations</title>
|
||
<meta property="og:title" content="Telegram Localization Platform">
|
||
<meta property="og:image" content="https://translations.telegram.org/file/811140670/16c2/VpvsRxIfc0k.140711/138731768d2c2ae7ba">
|
||
<meta property="og:description" content="This is the Telegram translation interface. To get started, find a phrase in your language that you can improve and suggest a new translation – or vote for an existing suggestion.">
|
||
|
||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png">
|
||
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
|
||
<script>document.cookie="stel_dt="+encodeURIComponent((new Date).getTimezoneOffset())+";path=/;max-age=31536000;samesite=None;secure"</script>
|
||
|
||
<link href="https://fonts.googleapis.com/css?family=Roboto:400,500,700" rel="stylesheet" type="text/css">
|
||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||
<link href="/css/bootstrap-extra.css?2" rel="stylesheet">
|
||
<link href="/css/telegram.css?230" rel="stylesheet">
|
||
<link href="/css/translations.css?118" rel="stylesheet">
|
||
<link href="/css/jquery-ui.min.css?1" rel="stylesheet">
|
||
<link href="/css/health.css?136" rel="stylesheet">
|
||
<link href="/css/contest-zoo.css?7" rel="stylesheet">
|
||
<link href="/css/tchart.min.css?10" rel="stylesheet">
|
||
<link href="/css/billboard.css?17" rel="stylesheet">
|
||
|
||
</head>
|
||
<body class="emoji_image no-transition">
|
||
|
||
<div id="aj_progress" class="progress-bar"></div>
|
||
|
||
<div id="aj_content"><div class="tr-container">
|
||
<header>
|
||
<div class="container">
|
||
|
||
<div class="header-wrap">
|
||
<div id="header-panel" class="header-panel">
|
||
<div class="header-auth">
|
||
<div class="header-auth-item"><a class="header-search-btn"></a></div><div class="header-auth-item"><a class="header-auth-link login-link" href="/auth">Login</a></div>
|
||
</div>
|
||
<div class="header-breadcrumb header-breadcrumb-simple">
|
||
<ol id="breadcrumb" class="header-nav breadcrumb"><li><a href="/">Translations</a></li></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<main class="container">
|
||
<nav class="tr-menu"><div class="tr-menu-section" data-menu-section-id="0">
|
||
<div class="tr-menu-header">
|
||
<span class="tr-menu-header-collapse"></span>
|
||
<div class="tr-menu-header-label">Languages</div>
|
||
|
||
</div>
|
||
<ul class="tr-menu-items" id="tr-menu-language-items"><li>
|
||
<a class="tr-menu-item" href="/en/">
|
||
<span class="nav-label">English</span>
|
||
</a>
|
||
</li><li class="languages-link">
|
||
<a class="tr-menu-item">
|
||
<span class="nav-label">Other languages...</span>
|
||
</a>
|
||
</li></ul>
|
||
</div><div class="tr-menu-section" data-menu-section-id="1">
|
||
<div class="tr-menu-header">
|
||
<span class="tr-menu-header-collapse"></span>
|
||
<div class="tr-menu-header-label">Apps</div>
|
||
|
||
</div>
|
||
<ul class="tr-menu-items"><li>
|
||
<a class="tr-menu-item" href="/en/android/">
|
||
<span class="nav-label">Android</span>
|
||
</a>
|
||
</li><li>
|
||
<a class="tr-menu-item" href="/en/ios/">
|
||
<span class="nav-label">iOS</span>
|
||
</a>
|
||
</li><li>
|
||
<a class="tr-menu-item" href="/en/tdesktop/">
|
||
<span class="nav-label">TDesktop</span>
|
||
</a>
|
||
</li><li>
|
||
<a class="tr-menu-item" href="/en/macos/">
|
||
<span class="nav-label">macOS</span>
|
||
</a>
|
||
</li><li>
|
||
<a class="tr-menu-item" href="/en/android_x/">
|
||
<span class="nav-label">Android X</span>
|
||
</a>
|
||
</li><li>
|
||
<a class="tr-menu-item" href="/en/emoji">
|
||
<span class="nav-label">Emoji</span>
|
||
</a>
|
||
</li></ul>
|
||
</div></nav>
|
||
<section class="content clearfix">
|
||
<section class="tr-content"><div id="dev_page_content_wrap" class=" ">
|
||
<div class="dev_page_bread_crumbs"></div>
|
||
<h1 id="dev_page_title">Translating Telegram</h1>
|
||
|
||
<div id="dev_page_content"><div>
|
||
<a href="/file/811140670/16c2/VpvsRxIfc0k.140711/138731768d2c2ae7ba" target="_blank"><img src="/file/811140670/16c2/VpvsRxIfc0k.140711/138731768d2c2ae7ba" title="translations.jpg, 137.41Kb" class="dev_side_image" style="max-width:400px" /></a>
|
||
</div>
|
||
|
||
<p>We've worked hard to make Telegram's <strong>English version</strong> as smooth as possible in terms of language. Now we're looking for equally smooth <strong>translations</strong> into the rest of the world's languages. If you're a linguist, pro translator or language geek and would like to help us get closer to perfection, you've come to the right place.</p>
|
||
<p><a data-href="/?start=1" class="languages-link arrow-link">Start Translating</a></p>
|
||
|
||
<h3><a class="anchor-link" href="#the-interface"><i class="anchor-icon"></i></a><a class="anchor" name="the-interface"></a>The Interface</h3>
|
||
<p>To get started, simply log in, find a phrase in your language that you can improve and <strong>suggest a new translation</strong> – or vote for an existing suggestion. As soon as your suggestions are reviewed and accepted, the new phrases become <strong>immediately available</strong> in Telegram apps, no updates required.</p>
|
||
<h3><a class="anchor-link" href="#official-translations"><i class="anchor-icon"></i></a><a class="anchor" name="official-translations"></a>Official Translations</h3>
|
||
<p>We're gradually expanding the list of languages available to all users from the “Language” menu in their apps. If you would like to help us maintain the official translation to your language on a continuous basis, see <a href="https://telegram.org/faq#q-can-i-translate-telegram">this page</a>.</p>
|
||
<hr>
|
||
<h2><a class="anchor-link" href="#style-guide"><i class="anchor-icon"></i></a><a class="anchor" name="style-guide"></a>Style Guide</h2>
|
||
<p>We think a <strong>good translation</strong> should be:</p>
|
||
<h5><a class="anchor-link" href="#1-consistent"><i class="anchor-icon"></i></a><a class="anchor" name="1-consistent"></a>1. Consistent</h5>
|
||
<p>The same things need to have the same names everywhere. Not just within one app, but also on all platforms. Telegram features should have the same names on Android, iOS, Windows and macOS – unless they have to do with platform defaults. For system features, we should always use platform defaults (unless they are truly ugly or don't fit).</p>
|
||
<h5><a class="anchor-link" href="#2-natural"><i class="anchor-icon"></i></a><a class="anchor" name="2-natural"></a>2. Natural</h5>
|
||
<p>You don't have to always stick to the English original. Sometimes it makes more sense to simply describe what the app does in your own language.</p>
|
||
<p>But please don't get carried away:</p>
|
||
<h5><a class="anchor-link" href="#3-default"><i class="anchor-icon"></i></a><a class="anchor" name="3-default"></a>3. Default</h5>
|
||
<p>It's no longer 2001 and our users have seen many other apps. It will be much easier for them to use Telegram if familiar concepts have familiar names here. Whenever you're looking for a word, focus on those that people are used to seeing in relevant context. What does Apple use in this case? What does Google use? What do Telegram's main competitors in your region use?</p>
|
||
<h5><a class="anchor-link" href="#4-beautiful"><i class="anchor-icon"></i></a><a class="anchor" name="4-beautiful"></a>4. Beautiful</h5>
|
||
<p>Use good language that would make the app look as if it was built in your region. Respect your language's grammar and style where possible. Avoid abbreviations. Try to find ways around gender problems instead of going for things like <em>o(a)</em>, unless the workaround looks even more awkward. In most cases it's possible to find a way of saying anything without hurting the language. </p>
|
||
<h5><a class="anchor-link" href="#5-and-it-must-fit"><i class="anchor-icon"></i></a><a class="anchor" name="5-and-it-must-fit"></a>5. And it MUST FIT</h5>
|
||
<p>This last one is never easy. Sometimes you need to look to the surrounding phrases and change them for the problematic phrase to fit and work.</p>
|
||
<blockquote>
|
||
<p><strong>An example</strong>: the German team couldn't make the secret chats description fit into the lines on an empty chat page. The English text says: 'A user has invited you to a secret chat. Secret chats:' then comes a list that has this item: 'use end-to-end encryption'. The maximum length for the list items is 25 characters. The problem with German is that the term for end-to-end encryption is 'Ende-zu-Ende Verschlüsselung' and is 28 characters long even without the 'use'. An anglicized version would have been 'End-to-end Verschlüsselung' — but it's still too long at 26 characters.</p>
|
||
<p>The German team found a workaround. They went and changed the first phrase, so that it now says 'A user has invited you to an end-to-end encrypted secret chat. Secret chats:' and then they came up with a new list item to replace the E2E encryption one, which was moved to the top - where there was enough room.</p>
|
||
</blockquote>
|
||
<hr>
|
||
<h3><a class="anchor-link" href="#typography"><i class="anchor-icon"></i></a><a class="anchor" name="typography"></a>Typography</h3>
|
||
<p>What we're looking for is not just linguistic, but also typographic and aesthetic correctness. The text is inseparable from design. Text <strong>is</strong> design and we need to make sure it <strong>works</strong>. So approach the text as a magazine editor would: </p>
|
||
<ol>
|
||
<li><strong>Everything must fit into its allotted space</strong>. So always check in-app after editing. Words and phrases that are too long will be automatically cut (Like thi…) or contracted (Li…is) — we can't allow this to happen. In other cases the text may flow over into the next line.</li>
|
||
<li>The text should ideally be kept from spreading over two lines where the original only has one line.</li>
|
||
<li>Same with double lines, try to avoid letting them spread into triple lines. Although this is a less strict requirement — it isn't too bad if you let the double-line descriptions in Settings become triple lined.</li>
|
||
<li>We need to avoid hanging words when there's just one or two words left on a new line.</li>
|
||
<li>We need to avoid gaps in the text, for example when the top right space is empty before the line break. A good way of avoiding this is to use shorter words, so that they wrap more easily. When short words are not an option, put your long ones at the beginning of the line, then add short words as padding. </li>
|
||
<li>There will be times when making things fit will seem impossible. Our experience shows that it never is. Several determined people focusing on a word and the phrases around it will always find a solution after a few weeks, or even earlier. After all, it's just words.</li>
|
||
</ol>
|
||
<p>This takes some effort, but it really makes you feel proud when you're done.</p>
|
||
<hr>
|
||
<h3><a class="anchor-link" href="#applied-typography"><i class="anchor-icon"></i></a><a class="anchor" name="applied-typography"></a>Applied Typography</h3>
|
||
<p>On the whole, we've worked hard to make the English version as typographically sound as possible. So as a rule of thumb, if your phrase is the same length as the English one, it will fit well. If it is shorter — not too much of a problem, but beware of hanging words and gaps.</p>
|
||
<p><strong>Note for iPhone Plus users:</strong> When checking strings in-app, try iOS Settings > Display & Brightness > View > 'Zoomed'. Using this mode you can make sure that strings will fit the screens of the narrower models.</p>
|
||
<hr>
|
||
<p>And that‘s about it. Let’s bring perfection to the localized versions of Telegram, together.</p>
|
||
</div>
|
||
|
||
</div></section>
|
||
</section>
|
||
</main>
|
||
</div><div class="popup-container login-popup-container hide" id="login-popup-container">
|
||
<div class="popup">
|
||
<div class="popup-body">
|
||
<section>
|
||
<h2>Log In</h2>
|
||
<p>Log in here to translate Telegram apps. Please enter your <b>phone number</b> in the <a target="_blank" rel="noopener" href="https://telegram.org/faq#login-and-sms">international format</a> and we will send a confirmation message to your account via Telegram.</p>
|
||
|
||
<form id="send-form" class="login-form">
|
||
<div class="form-group">
|
||
<input type="tel" class="form-control tr-form-control input-lg" id="phone-number" placeholder="+12223334455" autocomplete="off"/>
|
||
</div>
|
||
<div class="popup-buttons">
|
||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><button type="submit" class="btn btn-link btn-lg">Next</button>
|
||
</div>
|
||
</form>
|
||
|
||
<div id="login-form" class="hide">
|
||
<div class="form-group">
|
||
<span class="form-control tr-form-control input input-lg input-disabled"><strong id="phone-number-field"></strong> (<a class="login-back" href="/auth">Incorrect?</a>)</span>
|
||
<p class="help-block dots-animated">We've just sent you a message.<br/>Please confirm access via Telegram</p>
|
||
</div>
|
||
<div class="popup-buttons">
|
||
<a class="btn btn-link btn-lg login-cancel-btn">Cancel</a><a class="btn btn-link btn-lg login-back">Back</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div><div class="popup-container languages-popup-container hide" id="languages-popup-container">
|
||
<div class="popup">
|
||
<div class="popup-body popup-has-footer">
|
||
<h4>Languages</h4>
|
||
|
||
<form class="tr-popup-search-form tr-languages-search-form">
|
||
<input class="form-control tr-popup-search-field tr-languages-search-field" placeholder="Search languages" autocomplete="off" value="">
|
||
</form>
|
||
<div class="tr-popup-search-results-wrap tr-languages-results-wrap">
|
||
<div class="tr-popup-search-results tr-languages-results"></div>
|
||
</div>
|
||
<div class="tr-languages-add"><a href="/lang/new" data-layer class="need-auth">Add a new language</a></div>
|
||
</div>
|
||
</div>
|
||
</div></div>
|
||
<script src="/js/jquery.min.js?1"></script>
|
||
<script src="/js/bootstrap.min.js"></script>
|
||
<script src="/js/main-aj.js?58"></script>
|
||
<script src="/js/translations.js?108"></script>
|
||
<script src="/js/jquery-ui.min.js?1"></script>
|
||
<script src="/js/jquery-ex.js?11"></script>
|
||
<script src="/js/tesseract.js?1"></script>
|
||
<script src="/js/main.js?46"></script>
|
||
<script src="/js/tchart.min.js?18"></script>
|
||
<script src="/js/billboard.min.js?1"></script>
|
||
<script src="/js/stats.js?18"></script>
|
||
|
||
<script>ajInit({"version":787,"apiUrl":"\/api?hash=telegram-crawler","unauth":true,"state":{"langList":["en","af","sq","am","ar","az","eu","be","bn","bg","my","ca","zh-hans","zh-hant","hr","cs","da","nl","eo","et","fi","fr","gl","de","el","gu","he","hi","hu","id","ga","it","ja","kn","kk","km","ko","lv","lt","ms","ml","mt","mr","nb","or","fa","pl","pt-br","pt-pt","ro","ru","sr","sk","sl","es","sw","sv","ta","te","th","tr","tk","uk","ur","uz","vi"],"langpackList":[],"curLang":"en"}});</script>
|
||
<script id="aj_script">l.add({"WEB_ACTIVATE_LANGPACK_CONFIRM_TEXT":"Do you want to begin translating <b>{lang_pack}<\/b> to <b>{lang}<\/b>?","WEB_ACTIVATE_LANGPACK_CONFIRM_BUTTON":"Start Translating","WEB_LOADING":"Loading","WEB_NO_LANGUAGES_FOUND":"No languages found"});
|
||
Header.init();
|
||
Nav.init();
|
||
Aj.onLoad(function(state) {
|
||
function requestConfirmation(event) {
|
||
event && event.preventDefault();
|
||
var phone = $('#phone-number').val();
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: '/auth/request',
|
||
data: {
|
||
phone: phone
|
||
},
|
||
success: function(result) {
|
||
$('#phone-number-field').text(phone);
|
||
$('#send-form').addClass('hide');
|
||
$('#login-form').removeClass('hide');
|
||
checkAuth(result.temp_session);
|
||
},
|
||
error: function(xhr) {
|
||
showAlert(xhr.responseText || 'Server error');
|
||
},
|
||
dataType: 'json'
|
||
});
|
||
return false;
|
||
}
|
||
function cancelConfirmation(event) {
|
||
event && event.preventDefault();
|
||
$('#phone-number-field').text('');
|
||
$('#send-form').removeClass('hide');
|
||
$('#login-form').addClass('hide');
|
||
$('#phone-number').focus();
|
||
clearTimeout(window.authTimeout);
|
||
return false;
|
||
}
|
||
function checkAuth(temp_session) {
|
||
clearTimeout(window.authTimeout);
|
||
window.authTimeout = setTimeout(function doCheckAuth() {
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: '/auth/login',
|
||
data: {
|
||
temp_session: temp_session
|
||
},
|
||
success: function(result) {
|
||
if (result) {
|
||
location.reload();
|
||
} else {
|
||
checkAuth(temp_session);
|
||
}
|
||
},
|
||
error: function (xhr) {
|
||
showAlert(xhr.responseText || 'Server error');
|
||
},
|
||
dataType: 'json'
|
||
});
|
||
}, 700);
|
||
}
|
||
$('#login-popup-container').on('popup:open', function() {
|
||
$('#phone-number').focus();
|
||
});
|
||
$('#login-popup-container').on('popup:close', function() {
|
||
cancelConfirmation();
|
||
if (location.pathname == '/auth') {
|
||
window.history && history.replaceState(null, null, '/');
|
||
}
|
||
});
|
||
$('#login-popup-container #send-form').on('submit', requestConfirmation);
|
||
$('#login-popup-container .login-cancel-btn').on('click', function(e) {
|
||
e.preventDefault();
|
||
closePopup('#login-popup-container');
|
||
});
|
||
$('#login-popup-container .login-back').on('click', cancelConfirmation);
|
||
$('.login-link').on('click', function(e) {
|
||
e.stopImmediatePropagation();
|
||
e.preventDefault();
|
||
openPopup('#login-popup-container');
|
||
});
|
||
});
|
||
Aj.onUnload(function(state) {
|
||
$('#login-popup-container').off('popup:open');
|
||
$('#login-popup-container').off('popup:close');
|
||
$('#login-popup-container #send-form').off('submit');
|
||
$('#login-popup-container .login-cancel-btn').off('click');
|
||
$('#login-popup-container .login-back').off('click');
|
||
$('.login-link').off('click');
|
||
});
|
||
</script>
|
||
<script>Aj.pageLoaded();</script>
|
||
|
||
</body>
|
||
</html>
|
||
|