mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 19:08:55 -04:00
Merge branch 'release/1.9.x'
This commit is contained in:
commit
d13b43f003
@ -99,6 +99,9 @@ class Standalone:
|
|||||||
if len(platforms) == 0:
|
if len(platforms) == 0:
|
||||||
Standalone.notify.warning("No platforms found to build for!")
|
Standalone.notify.warning("No platforms found to build for!")
|
||||||
|
|
||||||
|
if 'win32' in platforms and 'win_i386' in platforms:
|
||||||
|
platforms.remove('win32')
|
||||||
|
|
||||||
outputDir = Filename(outputDir + "/")
|
outputDir = Filename(outputDir + "/")
|
||||||
outputDir.makeDir()
|
outputDir.makeDir()
|
||||||
for platform in platforms:
|
for platform in platforms:
|
||||||
@ -669,6 +672,9 @@ class Installer:
|
|||||||
if len(platforms) == 0:
|
if len(platforms) == 0:
|
||||||
Installer.notify.warning("No platforms found to build for!")
|
Installer.notify.warning("No platforms found to build for!")
|
||||||
|
|
||||||
|
if 'win32' in platforms and 'win_i386' in platforms:
|
||||||
|
platforms.remove('win32')
|
||||||
|
|
||||||
outputDir = Filename(outputDir + "/")
|
outputDir = Filename(outputDir + "/")
|
||||||
outputDir.makeDir()
|
outputDir.makeDir()
|
||||||
for platform in platforms:
|
for platform in platforms:
|
||||||
|
@ -210,6 +210,7 @@ start_p3dcert() {
|
|||||||
// environment, if they are set.
|
// environment, if they are set.
|
||||||
const char *keep[] = {
|
const char *keep[] = {
|
||||||
"TMP", "TEMP", "HOME", "USER",
|
"TMP", "TEMP", "HOME", "USER",
|
||||||
|
"LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG",
|
||||||
#ifdef HAVE_X11
|
#ifdef HAVE_X11
|
||||||
"DISPLAY", "XAUTHORITY",
|
"DISPLAY", "XAUTHORITY",
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "p3dCert.h"
|
#include "p3dCert.h"
|
||||||
|
#include "p3dCert_strings.h"
|
||||||
#include "wstring_encode.h"
|
#include "wstring_encode.h"
|
||||||
#include "mkdir_complete.h"
|
#include "mkdir_complete.h"
|
||||||
|
|
||||||
@ -26,8 +27,9 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
#define BUTTON_WIDTH 120
|
#define BUTTON_WIDTH 180 // fit the Russian text
|
||||||
#define BUTTON_SPACE 10
|
#define BUTTON_SPACE 10
|
||||||
|
|
||||||
#include "ca_bundle_data_src.c"
|
#include "ca_bundle_data_src.c"
|
||||||
@ -36,63 +38,152 @@
|
|||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
#define snprintf sprintf_s
|
#define snprintf sprintf_s
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char
|
#ifdef __APPLE__
|
||||||
self_signed_cert_text[] =
|
#include <CoreFoundation/CoreFoundation.h>
|
||||||
"This Panda3D application uses a self-signed certificate. "
|
#endif
|
||||||
"This means the author's name can't be verified, and you have "
|
|
||||||
"no way of knowing for sure who wrote it.\n\n"
|
|
||||||
|
|
||||||
"We recommend you click Cancel to avoid running this application.";
|
static LanguageIndex li = LI_default;
|
||||||
|
|
||||||
static const char
|
#if defined(_WIN32)
|
||||||
unknown_auth_cert_text[] =
|
static LanguageIndex detect_language() {
|
||||||
"This Panda3D application has been signed, but we don't recognize "
|
// This function was introduced in Windows Vista; it may not be available
|
||||||
"the authority that verifies the signature. This means the author's "
|
// on older systems.
|
||||||
"name can't be trusted, and you have no way of knowing "
|
typedef BOOL (*GUPL)(DWORD, PULONG, PZZWSTR, PULONG);
|
||||||
"for sure who wrote it.\n\n"
|
GUPL pGetUserPreferredUILanguages = (GUPL)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
|
||||||
|
TEXT("GetUserPreferredUILanguages"));
|
||||||
|
if (pGetUserPreferredUILanguages != NULL) {
|
||||||
|
ULONG num_langs = 0;
|
||||||
|
ULONG buffer_size = 0;
|
||||||
|
pGetUserPreferredUILanguages(8, &num_langs, NULL, &buffer_size);
|
||||||
|
PZZWSTR buffer = (PZZWSTR)_alloca(buffer_size);
|
||||||
|
if (pGetUserPreferredUILanguages(8, &num_langs, buffer, &buffer_size)) {
|
||||||
|
for (ULONG i = 0; i < num_langs; ++i) {
|
||||||
|
size_t len = wcslen(buffer);
|
||||||
|
if (len >= 2 && (buffer[2] == 0 || buffer[2] == L'-')) {
|
||||||
|
// It may be a two-letter code; match it in our list.
|
||||||
|
for (int j = 0; j < LI_COUNT; ++j) {
|
||||||
|
const char *lang_code = language_codes[j];
|
||||||
|
if (lang_code != NULL && lang_code[0] == buffer[0] &&
|
||||||
|
lang_code[1] == buffer[1]) {
|
||||||
|
return (LanguageIndex)j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer += len + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"We recommend you click Cancel to avoid running this application.";
|
// Fall back to the old Windows XP function.
|
||||||
|
LANGID lang = GetUserDefaultUILanguage() & 0x3ff;
|
||||||
|
if (lang == 0) {
|
||||||
|
return LI_default;
|
||||||
|
}
|
||||||
|
|
||||||
static const char
|
for (int i = 0; i < LI_COUNT; ++i) {
|
||||||
verified_cert_text[] =
|
if (language_ids[i] != 0 && language_ids[i] == lang) {
|
||||||
"This Panda3D application has been signed by %s. "
|
return (LanguageIndex)i;
|
||||||
"If you trust %s, then click the Run button below "
|
}
|
||||||
"to run this application on your computer. This will also "
|
}
|
||||||
"automatically approve this and any other applications signed by "
|
return LI_default;
|
||||||
"%s in the future.\n\n"
|
}
|
||||||
|
|
||||||
"If you are unsure about this application, "
|
#elif defined(__APPLE__)
|
||||||
"you should click Cancel instead.";
|
static LanguageIndex detect_language() {
|
||||||
|
// Get and iterate through the list of preferred languages.
|
||||||
|
CFArrayRef langs = CFLocaleCopyPreferredLanguages();
|
||||||
|
CFIndex num_langs = CFArrayGetCount(langs);
|
||||||
|
|
||||||
static const char
|
for (long i = 0; i < num_langs; ++i) {
|
||||||
expired_cert_text[] =
|
CFStringRef lang = (CFStringRef)CFArrayGetValueAtIndex(langs, i);
|
||||||
"This Panda3D application has been signed by %s, "
|
|
||||||
"but the certificate has expired.\n\n"
|
|
||||||
|
|
||||||
"You should check the current date set on your computer's clock "
|
CFIndex length = CFStringGetLength(lang);
|
||||||
"to make sure it is correct.\n\n"
|
if (length < 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
"If your computer's date is correct, we recommend "
|
CFIndex max_size = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1;
|
||||||
"you click Cancel to avoid running this application.";
|
char *buffer = (char *)alloca(max_size);
|
||||||
|
if (!CFStringGetCString(lang, buffer, max_size, kCFStringEncodingUTF8)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
static const char
|
if (isalnum(buffer[2])) {
|
||||||
generic_error_cert_text[] =
|
// It's not a two-letter code.
|
||||||
"This Panda3D application has been signed, but there is a problem "
|
continue;
|
||||||
"with the certificate (OpenSSL error code %d).\n\n"
|
}
|
||||||
|
|
||||||
"We recommend you click Cancel to avoid running this application.";
|
// See if we support this language.
|
||||||
|
for (int j = 0; j < LI_COUNT; ++j) {
|
||||||
|
const char *lang_code = language_codes[j];
|
||||||
|
if (lang_code != NULL && strncasecmp(buffer, lang_code, 2) == 0) {
|
||||||
|
CFRelease(langs);
|
||||||
|
return (LanguageIndex)j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const char
|
CFRelease(langs);
|
||||||
no_cert_text[] =
|
return LI_default;
|
||||||
"This Panda3D application has not been signed. This means you have "
|
}
|
||||||
"no way of knowing for sure who wrote it.\n\n"
|
|
||||||
|
|
||||||
"Click Cancel to avoid running this application.";
|
#else
|
||||||
|
static LanguageIndex detect_language() {
|
||||||
|
// First consult the LANGUAGE variable, which is a GNU extension that can
|
||||||
|
// contain multiple languages in order of preference.
|
||||||
|
const char *lang = getenv("LANGUAGE");
|
||||||
|
while (lang != NULL && lang[0] != 0) {
|
||||||
|
size_t len;
|
||||||
|
const char *next = strchr(lang, ':');
|
||||||
|
if (next == NULL) {
|
||||||
|
len = strlen(lang);
|
||||||
|
} else {
|
||||||
|
len = (next - lang);
|
||||||
|
++next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len >= 2 && !isalnum(lang[2])) {
|
||||||
|
// It may be a two-letter language code; match it in our list.
|
||||||
|
for (int i = 0; i < LI_COUNT; ++i) {
|
||||||
|
const char *lang_code = language_codes[i];
|
||||||
|
if (lang_code != NULL && strncasecmp(lang, lang_code, 2) == 0) {
|
||||||
|
return (LanguageIndex)i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lang = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fall back to the C locale functions.
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
lang = setlocale(LC_MESSAGES, NULL);
|
||||||
|
|
||||||
|
if (lang == NULL || lang[0] == 0 || strcmp(lang, "C") == 0) {
|
||||||
|
// Try the LANG variable.
|
||||||
|
lang = getenv("LANG");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lang == NULL || strlen(lang) < 2 || isalnum(lang[2])) {
|
||||||
|
// Couldn't extract a meaningful two-letter code.
|
||||||
|
return LI_default;
|
||||||
|
}
|
||||||
|
|
||||||
|
// It may be a two-letter language code; match it in our list.
|
||||||
|
for (int i = 0; i < LI_COUNT; ++i) {
|
||||||
|
const char *lang_code = language_codes[i];
|
||||||
|
if (lang_code != NULL && strncasecmp(lang, lang_code, 2) == 0) {
|
||||||
|
return (LanguageIndex)i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LI_default;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
int WINAPI
|
int WINAPI
|
||||||
@ -107,6 +198,8 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdS
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
li = detect_language();
|
||||||
|
|
||||||
wstring cert_filename (argv[0]);
|
wstring cert_filename (argv[0]);
|
||||||
wstring cert_dir (argv[1]);
|
wstring cert_dir (argv[1]);
|
||||||
LocalFree(argv);
|
LocalFree(argv);
|
||||||
@ -126,6 +219,8 @@ int main(int argc, char **argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
li = detect_language();
|
||||||
|
|
||||||
string cert_filename (argv[1]);
|
string cert_filename (argv[1]);
|
||||||
string cert_dir (argv[2]);
|
string cert_dir (argv[2]);
|
||||||
|
|
||||||
@ -148,7 +243,7 @@ AuthDialog(const wstring &cert_filename, const wstring &cert_dir) :
|
|||||||
AuthDialog::
|
AuthDialog::
|
||||||
AuthDialog(const string &cert_filename, const string &cert_dir) :
|
AuthDialog(const string &cert_filename, const string &cert_dir) :
|
||||||
#endif
|
#endif
|
||||||
Fl_Window(435, 242, "New Panda3D Application"),
|
Fl_Window(435, 242, new_application_title[li]),
|
||||||
_cert_dir(cert_dir)
|
_cert_dir(cert_dir)
|
||||||
{
|
{
|
||||||
_view_cert_dialog = NULL;
|
_view_cert_dialog = NULL;
|
||||||
@ -315,12 +410,20 @@ read_cert_file(const string &cert_filename) {
|
|||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
wcerr << L"Couldn't read " << cert_filename.c_str() << L"\n";
|
||||||
|
#else
|
||||||
cerr << "Couldn't read " << cert_filename.c_str() << "\n";
|
cerr << "Couldn't read " << cert_filename.c_str() << "\n";
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_cert = PEM_read_X509(fp, NULL, NULL, (void *)"");
|
_cert = PEM_read_X509(fp, NULL, NULL, (void *)"");
|
||||||
if (_cert == NULL) {
|
if (_cert == NULL) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
wcerr << L"Could not read certificate in " << cert_filename.c_str() << L".\n";
|
||||||
|
#else
|
||||||
cerr << "Could not read certificate in " << cert_filename.c_str() << ".\n";
|
cerr << "Could not read certificate in " << cert_filename.c_str() << ".\n";
|
||||||
|
#endif
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -510,19 +613,19 @@ layout() {
|
|||||||
short bx = (w() - nbuttons * BUTTON_WIDTH - (nbuttons - 1) * BUTTON_SPACE) / 2;
|
short bx = (w() - nbuttons * BUTTON_WIDTH - (nbuttons - 1) * BUTTON_SPACE) / 2;
|
||||||
|
|
||||||
if (_verify_result == 0 && _cert != NULL) {
|
if (_verify_result == 0 && _cert != NULL) {
|
||||||
Fl_Return_Button *run_button = new Fl_Return_Button(bx, next_y, BUTTON_WIDTH, 25, "Run");
|
Fl_Return_Button *run_button = new Fl_Return_Button(bx, next_y, BUTTON_WIDTH, 25, run_title[li]);
|
||||||
run_button->callback(this->run_clicked, this);
|
run_button->callback(this->run_clicked, this);
|
||||||
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_cert != NULL) {
|
if (_cert != NULL) {
|
||||||
Fl_Button *view_button = new Fl_Button(bx, next_y, BUTTON_WIDTH, 25, "View Certificate");
|
Fl_Button *view_button = new Fl_Button(bx, next_y, BUTTON_WIDTH, 25, show_cert_title[li]);
|
||||||
view_button->callback(this->view_cert_clicked, this);
|
view_button->callback(this->view_cert_clicked, this);
|
||||||
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl_Button *cancel_button;
|
Fl_Button *cancel_button;
|
||||||
cancel_button = new Fl_Button(bx, next_y, BUTTON_WIDTH, 25, "Cancel");
|
cancel_button = new Fl_Button(bx, next_y, BUTTON_WIDTH, 25, cancel_title[li]);
|
||||||
cancel_button->callback(this->cancel_clicked, this);
|
cancel_button->callback(this->cancel_clicked, this);
|
||||||
|
|
||||||
next_y += 42;
|
next_y += 42;
|
||||||
@ -542,12 +645,12 @@ void AuthDialog::
|
|||||||
get_text(char *header, size_t hlen, char *text, size_t tlen) {
|
get_text(char *header, size_t hlen, char *text, size_t tlen) {
|
||||||
switch (_verify_result) {
|
switch (_verify_result) {
|
||||||
case -1:
|
case -1:
|
||||||
strncpy(header, "No signature!", hlen);
|
strncpy(header, no_cert_title[li], hlen);
|
||||||
strncpy(text, no_cert_text, tlen);
|
strncpy(text, no_cert_text[li], tlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
snprintf(text, tlen, verified_cert_text, _friendly_name.c_str(),
|
snprintf(text, tlen, verified_cert_text[li], _friendly_name.c_str(),
|
||||||
_friendly_name.c_str(), _friendly_name.c_str());
|
_friendly_name.c_str(), _friendly_name.c_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -555,24 +658,24 @@ get_text(char *header, size_t hlen, char *text, size_t tlen) {
|
|||||||
case X509_V_ERR_CERT_HAS_EXPIRED:
|
case X509_V_ERR_CERT_HAS_EXPIRED:
|
||||||
case X509_V_ERR_CRL_NOT_YET_VALID:
|
case X509_V_ERR_CRL_NOT_YET_VALID:
|
||||||
case X509_V_ERR_CRL_HAS_EXPIRED:
|
case X509_V_ERR_CRL_HAS_EXPIRED:
|
||||||
strncpy(header, "Expired signature!", hlen);
|
strncpy(header, expired_cert_title[li], hlen);
|
||||||
snprintf(text, tlen, expired_cert_text, _friendly_name.c_str());
|
snprintf(text, tlen, expired_cert_text[li], _friendly_name.c_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
|
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
|
||||||
strncpy(header, "Unverified signature!", hlen);
|
strncpy(header, unverified_cert_title[li], hlen);
|
||||||
snprintf(text, tlen, unknown_auth_cert_text);
|
strncpy(text, unknown_auth_cert_text[li], tlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
|
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
|
||||||
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
|
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
|
||||||
strncpy(header, "Unverified signature!", hlen);
|
strncpy(header, unverified_cert_title[li], hlen);
|
||||||
strncpy(text, self_signed_cert_text, tlen);
|
strncpy(text, self_signed_cert_text[li], tlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
strncpy(header, "Unverified signature!", hlen);
|
strncpy(header, unverified_cert_title[li], hlen);
|
||||||
snprintf(text, tlen, generic_error_cert_text, _verify_result);
|
snprintf(text, tlen, generic_error_cert_text[li], _verify_result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,7 +686,7 @@ get_text(char *header, size_t hlen, char *text, size_t tlen) {
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
ViewCertDialog::
|
ViewCertDialog::
|
||||||
ViewCertDialog(AuthDialog *auth_dialog, X509 *cert) :
|
ViewCertDialog(AuthDialog *auth_dialog, X509 *cert) :
|
||||||
Fl_Window(600, 400, "View Certificate"),
|
Fl_Window(600, 400, show_cert_title[li]),
|
||||||
_auth_dialog(auth_dialog),
|
_auth_dialog(auth_dialog),
|
||||||
_cert(cert)
|
_cert(cert)
|
||||||
{
|
{
|
||||||
@ -660,12 +763,12 @@ layout() {
|
|||||||
|
|
||||||
short bx = (w() - BUTTON_WIDTH * 2 - BUTTON_SPACE) / 2;
|
short bx = (w() - BUTTON_WIDTH * 2 - BUTTON_SPACE) / 2;
|
||||||
|
|
||||||
Fl_Return_Button *run_button = new Fl_Return_Button(bx, 360, BUTTON_WIDTH, 25, "Run");
|
Fl_Return_Button *run_button = new Fl_Return_Button(bx, 360, BUTTON_WIDTH, 25, run_title[li]);
|
||||||
run_button->callback(this->run_clicked, this);
|
run_button->callback(this->run_clicked, this);
|
||||||
|
|
||||||
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
bx += BUTTON_WIDTH + BUTTON_SPACE;
|
||||||
|
|
||||||
Fl_Button *cancel_button = new Fl_Button(bx, 360, BUTTON_WIDTH, 25, "Cancel");
|
Fl_Button *cancel_button = new Fl_Button(bx, 360, BUTTON_WIDTH, 25, cancel_title[li]);
|
||||||
cancel_button->callback(this->cancel_clicked, this);
|
cancel_button->callback(this->cancel_clicked, this);
|
||||||
|
|
||||||
end();
|
end();
|
||||||
|
@ -92,9 +92,9 @@ private:
|
|||||||
X509 *_cert;
|
X509 *_cert;
|
||||||
STACK_OF(X509) *_stack;
|
STACK_OF(X509) *_stack;
|
||||||
|
|
||||||
char _header[32];
|
char _header[64];
|
||||||
char _text[512];
|
char _text[1024];
|
||||||
char _text_clean[1024];
|
char _text_clean[2048];
|
||||||
|
|
||||||
string _friendly_name;
|
string _friendly_name;
|
||||||
int _verify_result;
|
int _verify_result;
|
||||||
|
571
direct/src/plugin/p3dCert_strings.cxx
Normal file
571
direct/src/plugin/p3dCert_strings.cxx
Normal file
@ -0,0 +1,571 @@
|
|||||||
|
// Filename: p3dCert_strings.h
|
||||||
|
// Created by: rdb (25Mar15)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the revised BSD
|
||||||
|
// license. You should have received a copy of this license along
|
||||||
|
// with this source code in a file named "LICENSE."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "p3dCert_strings.h"
|
||||||
|
|
||||||
|
// Translations kindly provided by:
|
||||||
|
// eng: drwr
|
||||||
|
// nld: rdb
|
||||||
|
// deu: Sebastian Hoffmann <TheCheapestPixels at googlemail dot com>
|
||||||
|
// spa: Imanol Celaya <imanol at celaya dot me>
|
||||||
|
// ita: Flavio Clava
|
||||||
|
// rus: montreal
|
||||||
|
|
||||||
|
const char *language_codes[LI_COUNT] =
|
||||||
|
{"en", "nl", "de", "es", "it", "eo", "ru"};
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693%28v=vs.85%29.aspx
|
||||||
|
const unsigned char language_ids[LI_COUNT] =
|
||||||
|
{0x09, 0x13, 0x07, 0x0A, 0x10, 0x8F, 0x19};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
run_title[LI_COUNT] = {
|
||||||
|
"Run",
|
||||||
|
"Uitvoeren",
|
||||||
|
"Starten",
|
||||||
|
"Ejecutar",
|
||||||
|
"Lancia",
|
||||||
|
"Lan\304\211i",
|
||||||
|
"\320\227\320\260\320\277\321\203\321\201\321\202\320\270\321\202\321\214",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
cancel_title[LI_COUNT] = {
|
||||||
|
"Cancel",
|
||||||
|
"Annuleren",
|
||||||
|
"Abbrechen",
|
||||||
|
"Cancelar",
|
||||||
|
"Cancella",
|
||||||
|
"Nuligi",
|
||||||
|
"\320\236\321\202\320\274\320\265\320\275\320\260",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
show_cert_title[LI_COUNT] = {
|
||||||
|
"Show Certificate",
|
||||||
|
"Toon Certificaat",
|
||||||
|
"Zertifikat anzeigen",
|
||||||
|
"Mostrar certificado",
|
||||||
|
"Mostra certificato",
|
||||||
|
"Montri Ateston",
|
||||||
|
"\320\237\320\276\320\272\320\260\320\267\320\260\321\202\321\214 \321\201"
|
||||||
|
"\320\265\321\200\321\202\320\270\321\204\320\270\320\272\320\260\321\202",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
new_application_title[LI_COUNT] = {
|
||||||
|
"New Panda3D Application",
|
||||||
|
"Nieuwe Panda3D Applicatie",
|
||||||
|
"Neue Panda3D-Anwendung",
|
||||||
|
"Nueva aplicaci\303\263n de Panda3D",
|
||||||
|
"Nuova applicazione Panda3D",
|
||||||
|
"Nova aplika\304\265o de Panda3D",
|
||||||
|
"\320\235\320\276\320\262\320\276\320\265 Panda3D-\320\277\321\200\320\270"
|
||||||
|
"\320\273\320\276\320\266\320\265\320\275\320\270\320\265",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
no_cert_title[LI_COUNT] = {
|
||||||
|
"No signature!",
|
||||||
|
"Geen handtekening!",
|
||||||
|
"Keine Signatur!",
|
||||||
|
"Sin firma!",
|
||||||
|
"Nessuna firma!",
|
||||||
|
"Ne subskribo!",
|
||||||
|
"\320\235\320\265\321\202 \320\277\320\276\320\264\320\277\320\270\321\201"
|
||||||
|
"\320\270!",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
unverified_cert_title[LI_COUNT] = {
|
||||||
|
"Unverified signature!",
|
||||||
|
"Ongeverifieerde handtekening!",
|
||||||
|
"Unbest\303\244tigte Signatur!",
|
||||||
|
"Firma sin verificar!",
|
||||||
|
"Firma non verificata!",
|
||||||
|
"Nekontrolita subskribo!",
|
||||||
|
"\320\235\320\265\320\277\321\200\320\276\320\262\320\265\321\200\320\265"
|
||||||
|
"\320\275\320\275\320\260\321\217 \320\277\320\276\320\264\320\277\320\270"
|
||||||
|
"\321\201\321\214!",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *
|
||||||
|
expired_cert_title[LI_COUNT] = {
|
||||||
|
"Expired signature!",
|
||||||
|
"Verlopen handtekening!",
|
||||||
|
"Abgelaufene Signatur!",
|
||||||
|
"Firma caducada!",
|
||||||
|
"Firma scaduta!",
|
||||||
|
"Eksvalidi\304\235inta subskribo!",
|
||||||
|
"\320\241\321\200\320\276\320\272 \320\264\320\265\320\271\321\201\321\202"
|
||||||
|
"\320\262\320\270\321\217 \320\277\320\276\320\264\320\277\320\270\321\201"
|
||||||
|
"\320\270 \320\270\321\201\321\202\321\221\320\272!",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
self_signed_cert_text[LI_COUNT] = {
|
||||||
|
// eng
|
||||||
|
"This Panda3D application uses a self-signed certificate. "
|
||||||
|
"This means the author's name can't be verified, and you have "
|
||||||
|
"no way of knowing for sure who wrote it.\n"
|
||||||
|
"\n"
|
||||||
|
"We recommend you click Cancel to avoid running this application.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie gebruikt een zelf-getekend certificaat. "
|
||||||
|
"Dit betekent dat de auteursnaam niet kan worden geverifieerd, en het "
|
||||||
|
"niet zeker is of de applicatie te vertrouwen is.\n"
|
||||||
|
"\n"
|
||||||
|
"Het is aanbevolen om op Annuleren te klikken om de applicatie af te "
|
||||||
|
"sluiten.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Panda3D-Anwendung benutzt ein selbst-signiertes Zertifikat. Dies "
|
||||||
|
"bedeutet, dass weder der Name des Autors \303\274berpr\303\274ft werden "
|
||||||
|
"kann, noch dass garantiert werden kann, dass tats\303\244chlich die "
|
||||||
|
"angegebene Person diese Anwendung geschrieben hat.\n"
|
||||||
|
"\n"
|
||||||
|
"Wir empfehlen, dass Sie Abbrechen dr\303\274cken um diese Anwendung nicht "
|
||||||
|
"auszuf\303\274hren.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n de Panda3D usa un certificado autofirmado. "
|
||||||
|
"Esto significa que el nombre del autor no puede ser verificado y no se "
|
||||||
|
"puede conocer seguro quien la ha escrito.\n"
|
||||||
|
"\n"
|
||||||
|
"Se recomienda cancelar para evitar ejecutar esta aplicaci\303\263n.",
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D usa un certificato autofirmato. Ci\303\262 "
|
||||||
|
"significa che il nome dell'autore non pu\303\262 essere verificato, e "
|
||||||
|
"che non hai modo di assicurarti circa chi la abbia scritta.\n"
|
||||||
|
"\n"
|
||||||
|
"Raccomandiamo di cliccare su Cancella per evitare di lanciare questa "
|
||||||
|
"applicazione.",
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o de Panda3D uzas memsubskribitan ateston. "
|
||||||
|
"Tio signifas ke la nomo de la verkanto ne povas esti kontrolita, kaj vi "
|
||||||
|
"ne havas certan scimanieron pri la vera verkanto de la aplika\304\265o.\n"
|
||||||
|
"\n"
|
||||||
|
"Ni rekomendas ke vi premas la butonon 'Nuligi' por eviti lan\304\211on de "
|
||||||
|
"\304\211i tiu aplika\304\265o.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\255\321\202\320\276 \320\277\321\200\320\270\320\273\320\276\320\266"
|
||||||
|
"\320\265\320\275\320\270\320\265 \320\270\321\201\320\277\320\276\320\273"
|
||||||
|
"\321\214\320\267\321\203\320\265\321\202 \321\201\320\260\320\274\320\276"
|
||||||
|
"\320\267\320\260\320\262\320\265\321\200\320\265\320\275\320\275\321\213"
|
||||||
|
"\320\271 \321\201\320\265\321\200\321\202\320\270\321\204\320\270\320\272"
|
||||||
|
"\320\260\321\202. \320\255\321\202\320\276 \320\276\320\267\320\275"
|
||||||
|
"\320\260\321\207\320\260\320\265\321\202, \321\207\321\202\320\276 "
|
||||||
|
"\320\270\320\274\321\217 \320\260\320\262\321\202\320\276\321\200\320\260 "
|
||||||
|
"\320\275\320\265 \320\274\320\276\320\266\320\265\321\202 \320\261\321\213"
|
||||||
|
"\321\202\321\214 \320\277\320\276\320\264\321\202\320\262\320\265\320\266"
|
||||||
|
"\320\264\320\265\320\275\320\276, \320\270 \320\262\321\213 \320\275"
|
||||||
|
"\320\265 \320\274\320\276\320\266\320\265\321\202\320\265 \320\267\320\275"
|
||||||
|
"\320\260\321\202\321\214, \320\272\321\202\320\276 \320\275\320\260"
|
||||||
|
"\320\277\320\270\321\201\320\260\320\273 \321\215\321\202\320\276 \320\277"
|
||||||
|
"\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\234\321\213 \321\200\320\265\320\272\320\276\320\274\320\265\320\275"
|
||||||
|
"\320\264\321\203\320\265\320\274 \320\262\320\260\320\274 \320\275\320\260"
|
||||||
|
"\320\266\320\260\321\202\321\214 \"\320\236\321\202\320\274\320\265"
|
||||||
|
"\320\275\320\260\" \320\270 \320\275\320\265 \320\267\320\260\320\277"
|
||||||
|
"\321\203\321\201\320\272\320\260\321\202\321\214 \321\215\321\202\320\276 "
|
||||||
|
"\320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270"
|
||||||
|
"\320\265.",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
unknown_auth_cert_text[LI_COUNT] = {
|
||||||
|
"This Panda3D application has been signed, but we don't recognize "
|
||||||
|
"the authority that verifies the signature. This means the author's "
|
||||||
|
"name can't be verified, and you have no way of knowing "
|
||||||
|
"for sure who wrote it.\n"
|
||||||
|
"\n"
|
||||||
|
"We recommend you click Cancel to avoid running this application.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie is ondertekend, maar de certificaatautoriteit "
|
||||||
|
"die het certificaat heeft uitgegeven wordt niet herkend. Dit betekent "
|
||||||
|
"dat de auteursnaam niet te vertrouwen is, en het niet zeker is wie de "
|
||||||
|
"applicatie gemaakt heeft.\n"
|
||||||
|
"\n"
|
||||||
|
"Het is aanbevolen om op Annuleren te klikken om de applicatie af te "
|
||||||
|
"sluiten.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Panda3D-Anwendung wurde signiert, aber die "
|
||||||
|
"\303\234berpr\303\274fungsstelle wurde nicht anerkannt. Dies bedeutet, "
|
||||||
|
"dass weder der Name des Autors \303\274berpr\303\274ft werden kann, noch "
|
||||||
|
"dass garantiert werden kann, dass tats\303\244chlich die angegebene "
|
||||||
|
"Person diese Anwendung geschrieben hat.\n"
|
||||||
|
"\n"
|
||||||
|
"Wir empfehlen, dass Sie Abbrechen dr\303\274cken um diese Anwendung nicht "
|
||||||
|
"auszuf\303\274hren.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n de Panda3D esta firmada, pero no reconocemos la "
|
||||||
|
"autoridad que la verifica. Esto significa que el nombre del autor no "
|
||||||
|
"puede ser verificado y no se puede conocer seguro quien la ha escrito.\n"
|
||||||
|
"\n"
|
||||||
|
"Se recomienda cancelar para evitar ejecutar esta aplicaci\303\263n.",
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D \303\250 stata firmata, ma non riconosciamo "
|
||||||
|
"l'autorit\303\240 che verifica la firma. Ci\303\262 significa che il "
|
||||||
|
"nome dell'autore non pu\303\262 essere verificato, e che non hai modo "
|
||||||
|
"di assicurarti circa chi la abbia scritta.\n"
|
||||||
|
"\n"
|
||||||
|
"Raccomandiamo di cliccare su Cancella per evitare di lanciare questa "
|
||||||
|
"applicazione.",
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o estas subskribita, sed ni ne rekonas "
|
||||||
|
"la a\305\255toritaton, kiu kontrolas la subskribon. Tio signifas ke la "
|
||||||
|
"nomo de la verkanto ne povas esti konfidata, kaj vi ne havas certan "
|
||||||
|
"scimanieron pri la vera verkanto de la aplika\304\265o.\n"
|
||||||
|
"\n"
|
||||||
|
"Ni rekomendas ke vi premas la butonon 'Nuligi' por eviti lan\304\211on "
|
||||||
|
"de \304\211i tiu aplika\304\265o.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\243 \321\215\321\202\320\276\320\263\320\276 \320\277\321\200\320\270"
|
||||||
|
"\320\273\320\276\320\266\320\265\320\275\320\270\321\217 \320\265\321\201"
|
||||||
|
"\321\202\321\214 \320\277\320\276\320\264\320\277\320\270\321\201\321\214,"
|
||||||
|
" \320\277\320\276 \320\272\320\276\321\202\320\276\321\200\320\276\320\271"
|
||||||
|
" \320\274\321\213 \320\275\320\265 \320\274\320\276\320\266\320\265"
|
||||||
|
"\320\274 \321\200\320\260\321\201\320\277\320\276\320\267\320\275\320\260"
|
||||||
|
"\321\202\321\214 \320\262\320\273\320\260\320\264\320\265\320\273\321\214"
|
||||||
|
"\321\206\320\260. \320\255\321\202\320\276 \320\276\320\267\320\275"
|
||||||
|
"\320\260\321\207\320\260\320\265\321\202, \321\207\321\202\320\276 "
|
||||||
|
"\320\270\320\274\321\217 \320\260\320\262\321\202\320\276\321\200\320\260 "
|
||||||
|
"\320\275\320\265 \320\274\320\276\320\266\320\265\321\202 \320\261\321\213"
|
||||||
|
"\321\202\321\214 \320\276\320\277\321\200\320\265\320\264\320\265\320\273"
|
||||||
|
"\320\265\320\275\320\276, \320\270 \320\275\320\265\320\262\320\276"
|
||||||
|
"\320\267\320\274\320\276\320\266\320\275\320\276 \321\202\320\276\321\207"
|
||||||
|
"\320\275\320\276 \321\203\320\267\320\275\320\260\321\202\321\214, "
|
||||||
|
"\320\272\321\202\320\276 \320\275\320\260\320\277\320\270\321\201\320\260"
|
||||||
|
"\320\273 \321\215\321\202\320\276 \320\277\321\200\320\270\320\273\320\276"
|
||||||
|
"\320\266\320\265\320\275\320\270\320\265.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\234\321\213 \321\200\320\265\320\272\320\276\320\274\320\265\320\275"
|
||||||
|
"\320\264\321\203\320\265\320\274 \320\262\320\260\320\274 \320\275\320\260"
|
||||||
|
"\320\266\320\260\321\202\321\214 \"\320\236\321\202\320\274\320\265"
|
||||||
|
"\320\275\320\260\" \320\270 \320\275\320\265 \320\267\320\260\320\277"
|
||||||
|
"\321\203\321\201\320\272\320\260\321\202\321\214 \321\215\321\202\320\276 "
|
||||||
|
"\320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270"
|
||||||
|
"\320\265.",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
verified_cert_text[LI_COUNT] = {
|
||||||
|
// eng
|
||||||
|
"This Panda3D application has been signed by %s. "
|
||||||
|
"If you trust %s, then click the Run button below "
|
||||||
|
"to run this application on your computer. This will also "
|
||||||
|
"automatically approve this and any other applications signed by "
|
||||||
|
"%s in the future.\n"
|
||||||
|
"\n"
|
||||||
|
"If you are unsure about this application, "
|
||||||
|
"you should click Cancel instead.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie is ondertekend door %s. "
|
||||||
|
"Als u %s vertrouwt, klik dan de onderstaande knop Uitvoeren om de applicatie "
|
||||||
|
"op uw computer uit te voeren. Dit zal ook deze en andere door %s getekende "
|
||||||
|
"applicaties in het vervolg toestaan.\n"
|
||||||
|
"\n"
|
||||||
|
"Als u niet zeker bent over deze applicatie is het aanbevolen om op "
|
||||||
|
"Annuleren te klikken.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Panda3D-Anwendung wurde von %s signiert. Falls Sie %s vertrauen, "
|
||||||
|
"dr\303\274cken Sie den Starten-Knopf, um diese Anwendung auszuf\303\274hren. "
|
||||||
|
"Zudem werden in der Zukunft diese und alle anderen von %s signierten "
|
||||||
|
"Anwendungen automatisch als vertrauensw\303\274rdig anerkannt.\n"
|
||||||
|
"\n"
|
||||||
|
"Falls Sie sich unsicher \303\274ber diese Anwendung sind, sollten Sie "
|
||||||
|
"Abbrechen dr\303\274cken.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n de Panda3D ha sido firmada por %s. Si se considera %s"
|
||||||
|
"de confianza el bot\303\263n inferior ejecutar\303\241 la aplicaci\303\263n."
|
||||||
|
"Esto validara esta y cualquier otra applizacion firmada por %s en el futuro.\n"
|
||||||
|
"\n"
|
||||||
|
"Si se duda de la aplicaci\303\263nse recomienda cancelar."
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D \303\250 stata firmata da %s. Se %s \303\250 "
|
||||||
|
"un'entit\303\240 fidata, allora clicca il bottone Lancia sottostante per "
|
||||||
|
"lanciare questa applicazione sul tuo computer. Inoltre, ci\303\262 "
|
||||||
|
"approver\303\240 automaticamente questa e ogni altra applicazione "
|
||||||
|
"firmata da %s in futuro.\n"
|
||||||
|
"\n"
|
||||||
|
"Se non sei sicuro circa questa applicazione, dovresti invece cliccare "
|
||||||
|
"su Cancella.",
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o estas subskribita de %s. "
|
||||||
|
"Se %s estas fidinda la\305\255 vi, premu la butonon 'Lan\304\211i' sube por "
|
||||||
|
"lan\304\211i \304\211i tiun aplika\304\265on per via komputilo. Anka\305\255 "
|
||||||
|
"tio a\305\255tomate estonece aprobos \304\211i tiun kaj alian ajn "
|
||||||
|
"aplika\304\265on, kiu estas subskribita de %s.\n"
|
||||||
|
"\n"
|
||||||
|
"Se vi ne estas certa pri \304\211i tiu aplika\304\265o, "
|
||||||
|
"vi anstata\305\255e povus premi la butonon 'Nuligi'.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\255\321\202\320\276 \320\277\321\200\320\270\320\273\320\276\320\266"
|
||||||
|
"\320\265\320\275\320\270\320\265 \320\277\320\276\320\264\320\277\320\270"
|
||||||
|
"\321\201\320\260\320\275\320\276 %s. "
|
||||||
|
"\320\225\321\201\320\273\320\270 \320\262\321\213 \320\264\320\276\320\262"
|
||||||
|
"\320\265\321\200\321\217\320\265\321\202\320\265 %s, \320\275\320\260"
|
||||||
|
"\320\266\320\274\320\270\321\202\320\265 \320\272\320\275\320\276\320\277"
|
||||||
|
"\320\272\321\203 \"\320\227\320\260\320\277\321\203\321\201\321\202"
|
||||||
|
"\320\270\321\202\321\214\" \320\262\320\275\320\270\320\267\321\203, "
|
||||||
|
"\321\207\321\202\320\276\320\261\321\213 \320\267\320\260\320\277\321\203"
|
||||||
|
"\321\201\321\202\320\270\321\202\321\214 \321\215\321\202\320\276 \320\277"
|
||||||
|
"\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\265 "
|
||||||
|
"\320\275\320\260 \320\262\320\260\321\210\320\265\320\274 \320\272\320\276"
|
||||||
|
"\320\274\320\277\321\214\321\216\321\202\320\265\321\200\320\265. \320\255"
|
||||||
|
"\321\202\320\276 \321\202\320\260\320\272\320\266\320\265 \320\260\320\262"
|
||||||
|
"\321\202\320\276\320\274\320\260\321\202\320\270\321\207\320\265\321\201"
|
||||||
|
"\320\272\320\270 \320\277\320\276\320\264\321\202\320\262\320\265\321\200"
|
||||||
|
"\320\264\320\270\321\202 \321\215\321\202\320\276 \320\270 \320\264"
|
||||||
|
"\321\200\321\203\320\263\320\270\320\265 \320\277\321\200\320\270\320\273"
|
||||||
|
"\320\276\320\266\320\265\320\275\320\270\321\217, \320\275\320\260\320\277"
|
||||||
|
"\320\270\321\201\320\260\320\275\320\275\321\213\320\265 %s \320\262 "
|
||||||
|
"\320\261\321\203\320\264\321\203\321\211\320\265\320\274.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\225\321\201\320\273\320\270 \320\262\321\213 \320\275\320\265 "
|
||||||
|
"\321\203\320\262\320\265\321\200\320\265\320\275\321\213 \320\262 \321\215"
|
||||||
|
"\321\202\320\276\320\274 \320\277\321\200\320\270\320\273\320\276\320\266"
|
||||||
|
"\320\265\320\275\320\270\320\270, \320\275\320\260\320\266\320\274\320\270"
|
||||||
|
"\321\202\320\265 \320\272\320\275\320\276\320\277\320\272\321\203 \""
|
||||||
|
"\320\236\321\202\320\274\320\265\320\275\320\260\".",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
expired_cert_text[LI_COUNT] = {
|
||||||
|
// eng
|
||||||
|
"This Panda3D application has been signed by %s, "
|
||||||
|
"but the certificate has expired.\n"
|
||||||
|
"\n"
|
||||||
|
"You should check the current date set on your computer's clock "
|
||||||
|
"to make sure it is correct.\n"
|
||||||
|
"\n"
|
||||||
|
"If your computer's date is correct, we recommend "
|
||||||
|
"you click Cancel to avoid running this application.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie is ondertekend door %s, maar de geldigheidsdatum "
|
||||||
|
"van het certificaat is verstreken.\n"
|
||||||
|
"\n"
|
||||||
|
"Controleer de datum op uw computerklok om te zorgen dat deze juist is "
|
||||||
|
"ingesteld.\n"
|
||||||
|
"\n"
|
||||||
|
"Als de datum op uw computer juist is, is het aanbevolen om op Annuleren te "
|
||||||
|
"klikken om de applicatie af te sluiten.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Anwendung wurde von %s signiert, aber das Zertifikat ist abgelaufen.\n"
|
||||||
|
"\n"
|
||||||
|
"Sie sollten die aktuelle Uhrzeit auf Ihrem Computer "
|
||||||
|
"\303\274berpr\303\274fen, um sicherzugehen, dass sie korrekt ist.\n"
|
||||||
|
"\n"
|
||||||
|
"Falls die Uhrzeit auf Ihrem Computer korrekt ist, empfehlen wir Ihnen "
|
||||||
|
"Abbrechen zu dr\303\274cken.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n Panda3D ha sido firmada por %s pero el certificado ha"
|
||||||
|
"caducado.\n"
|
||||||
|
"\n"
|
||||||
|
"Se recomienda comprobar la fecha del reloj.\n"
|
||||||
|
"\n"
|
||||||
|
"Si la fecha del reloj es correcta se recomienda cancelar.",
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D \303\250 stata firmata da %s, ma il "
|
||||||
|
"certificato \303\250 scaduto.\n"
|
||||||
|
"\n"
|
||||||
|
"Dovresti controllare la data attuale impostata nell'orologio del tuo "
|
||||||
|
"computer per assicurarti che sia corretta.\n"
|
||||||
|
"\n"
|
||||||
|
"Se la data del tuo computer \303\250 corretta, raccomandiamo di cliccare "
|
||||||
|
"Cancella per evitare di lanciare questa applicazione."
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o de Panda3D estas subskribita de %s, "
|
||||||
|
"sed la atesto eksvalidi\304\235is.\n"
|
||||||
|
"\n"
|
||||||
|
"Vi povus kontroli la aktualan daton, kiu estas agordata sur la horlo\304\235o de "
|
||||||
|
"via komputilo por certigi ke \304\235i estas korekta.\n"
|
||||||
|
"\n"
|
||||||
|
"Se la dato de via komputilo estas korekta, ni rekomendas ke vi premas la "
|
||||||
|
"butonon 'Nuligi' por eviti lan\304\211on de \304\211i tiu aplika\304\265o.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\255\321\202\320\276 \320\277\321\200\320\270\320\273\320\276\320\266"
|
||||||
|
"\320\265\320\275\320\270\320\265 \320\277\320\276\320\264\320\277\320\270"
|
||||||
|
"\321\201\320\260\320\275\320\276 %s, \320\276\320\264\320\275\320\260"
|
||||||
|
"\320\272\320\276 \321\201\321\200\320\276\320\272 \320\264\320\265\320\271"
|
||||||
|
"\321\201\321\202\320\262\320\270\321\217 \321\201\320\265\321\200\321\202"
|
||||||
|
"\320\270\321\204\320\270\320\272\320\260\321\202\320\260 \320\270\321\201"
|
||||||
|
"\321\202\321\221\320\272.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\237\321\200\320\276\320\262\320\265\321\200\321\214\321\202\320\265, "
|
||||||
|
"\320\277\320\276\320\266\320\260\320\273\321\203\320\271\321\201\321\202"
|
||||||
|
"\320\260, \320\264\320\260\321\202\321\203 \320\275\320\260 \320\262"
|
||||||
|
"\320\260\321\210\320\265\320\274 \320\272\320\276\320\274\320\277\321\214"
|
||||||
|
"\321\216\321\202\320\265\321\200\320\265.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\225\321\201\320\273\320\270 \320\275\320\260 \320\262\320\260\321\210"
|
||||||
|
"\320\265\320\274 \320\272\320\276\320\274\320\277\321\214\321\216\321\202"
|
||||||
|
"\320\265\321\200\320\265 \321\203\321\201\321\202\320\260\320\275\320\276"
|
||||||
|
"\320\262\320\273\320\265\320\275\320\276 \320\277\321\200\320\260\320\262"
|
||||||
|
"\320\270\320\273\321\214\320\275\320\276\320\265 \320\262\321\200\320\265"
|
||||||
|
"\320\274\321\217, \320\274\321\213 \321\200\320\265\320\272\320\276"
|
||||||
|
"\320\274\320\265\320\275\320\264\321\203\320\265\320\274 \320\262\320\260"
|
||||||
|
"\320\274 \320\275\320\260\320\266\320\260\321\202\321\214 \320\272\320\275"
|
||||||
|
"\320\276\320\277\320\272\321\203 \"\320\236\321\202\320\274\320\265"
|
||||||
|
"\320\275\320\260\" \320\270 \320\275\320\265 \320\267\320\260\320\277"
|
||||||
|
"\321\203\321\201\320\272\320\260\321\202\321\214 \321\215\321\202\320\276 "
|
||||||
|
"\320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270"
|
||||||
|
"\320\265.",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
generic_error_cert_text[LI_COUNT] = {
|
||||||
|
// eng
|
||||||
|
"This Panda3D application has been signed, but there is a problem "
|
||||||
|
"with the certificate (OpenSSL error code %d).\n"
|
||||||
|
"\n"
|
||||||
|
"We recommend you click Cancel to avoid running this application.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie is ondertekend, maar er is een probleem "
|
||||||
|
"met het certificaat opgetreden (OpenSSL foutcode %d).\n"
|
||||||
|
"\n"
|
||||||
|
"Het is aanbevolen om op Annuleren te klikken om de applicatie af te "
|
||||||
|
"sluiten.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Panda3D-Anwendung wurde signiert, aber es gibt ein Problem mit "
|
||||||
|
"dem Zertifikat (OpenSSL Fehlercode %d).\n"
|
||||||
|
"\n"
|
||||||
|
"Wir empfehlen, dass Sie Abbrechen dr\303\274cken um diese Anwendung nicht "
|
||||||
|
"auszuf\303\274hren.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n de Panda3D esta firmada pero hay un problema con el "
|
||||||
|
"certificado (Error de OpenSSL %d).\n"
|
||||||
|
"\n"
|
||||||
|
"Se recomienda cancelar para evitar ejecutar esta aplicaci\303\263n.",
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D \303\250 stata firmata, ma c'\303\250 un "
|
||||||
|
"problema col certificato (codice di errore OpenSSL %s).\n"
|
||||||
|
"\n"
|
||||||
|
"Raccomandiamo di cliccare su Cancella per evitare di lanciare questa "
|
||||||
|
"applicazione.",
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o de Panda3D estas subskribita, sed la "
|
||||||
|
"atesto havas problemon (OpenSSL erarkodo %d).\n"
|
||||||
|
"\n"
|
||||||
|
"Ni rekomendas ke vi premas la butonon 'Nuligi' por eviti lan\304\211on "
|
||||||
|
"de \304\211i tiu aplika\304\265o.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\243 \321\215\321\202\320\276\320\263\320\276 \320\277\321\200\320\270"
|
||||||
|
"\320\273\320\276\320\266\320\265\320\275\320\270\321\217 \320\265\321\201"
|
||||||
|
"\321\202\321\214 \320\277\320\276\320\264\320\277\320\270\321\201\321\214,"
|
||||||
|
" \320\275\320\276 \320\262\320\276\320\267\320\275\320\270\320\272\320\273"
|
||||||
|
"\320\260 \320\277\321\200\320\276\320\261\320\273\320\265\320\274\320\260 "
|
||||||
|
"\321\201 \321\201\320\265\321\200\321\202\320\270\321\204\320\270\320\272"
|
||||||
|
"\320\260\321\202\320\276\320\274 (\320\232\320\276\320\264 \320\276"
|
||||||
|
"\321\210\320\270\320\261\320\272\320\270 OpenSSL %d).\n"
|
||||||
|
"\n"
|
||||||
|
"\320\234\321\213 \321\200\320\265\320\272\320\276\320\274\320\265\320\275"
|
||||||
|
"\320\264\321\203\320\265\320\274 \320\262\320\260\320\274 \320\275\320\260"
|
||||||
|
"\320\266\320\260\321\202\321\214 \"\320\236\321\202\320\274\320\265"
|
||||||
|
"\320\275\320\260\" \320\270 \320\275\320\265 \320\267\320\260\320\277"
|
||||||
|
"\321\203\321\201\320\272\320\260\321\202\321\214 \321\215\321\202\320\276 "
|
||||||
|
"\320\277\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270"
|
||||||
|
"\320\265.",
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char *
|
||||||
|
no_cert_text[LI_COUNT] = {
|
||||||
|
"This Panda3D application has not been signed. This means you have "
|
||||||
|
"no way of knowing for sure who wrote it.\n"
|
||||||
|
"\n"
|
||||||
|
"Click Cancel to avoid running this application.",
|
||||||
|
|
||||||
|
// nld
|
||||||
|
"Deze Panda3D applicatie is niet ondertekend. Dit betekent dat het niet "
|
||||||
|
"mogelijk is om de auteur te verifi\303\253ren.\n"
|
||||||
|
"\n"
|
||||||
|
"Klik op Annuleren om de applicatie af te sluiten.",
|
||||||
|
|
||||||
|
// deu
|
||||||
|
"Diese Panda3D-Anwendung wurde nicht signiert. Es gibt keine "
|
||||||
|
"M\303\266glichkeit festzustellen, wer diese entwickelt hat.\n"
|
||||||
|
"\n"
|
||||||
|
"Dr\303\274cken Sie Abbrechen, um diese Anwendung nicht auszuf\303\274hren.",
|
||||||
|
|
||||||
|
// spa
|
||||||
|
"Esta aplicaci\303\263n de Panda3D no esta firmada, no hay forma de conocer "
|
||||||
|
"quien la ha escrito.\n"
|
||||||
|
"\n"
|
||||||
|
"Cancelar para evitar ejecutar la aplicaci\303\263n.",
|
||||||
|
|
||||||
|
// ita
|
||||||
|
"Questa applicazione Panda3D non \303\250 stata firmata. Ci\303\262 "
|
||||||
|
"significa che non hai modo di assicurarti circa chi la abbia scritta.\n"
|
||||||
|
"\n"
|
||||||
|
"Clicca Cancella per evitare di lanciare questa applicazione.",
|
||||||
|
|
||||||
|
// epo
|
||||||
|
"\304\210i tiu aplika\304\265o de Panda3D ne estas subskribita. Tio "
|
||||||
|
"signifas ke vi ne havas certan scimanieron pri la vera verkanto de "
|
||||||
|
"la aplika\304\265o.\n"
|
||||||
|
"\n"
|
||||||
|
"Premu la butonon 'Nuligi' por eviti lan\304\211on de \304\211i tiu "
|
||||||
|
"aplika\304\265o.",
|
||||||
|
|
||||||
|
// rus
|
||||||
|
"\320\243 \321\215\321\202\320\276\320\263\320\276 \320\277\321\200\320\270"
|
||||||
|
"\320\273\320\276\320\266\320\265\320\275\320\270\321\217 \320\275\320\265"
|
||||||
|
"\321\202 \320\277\320\276\320\264\320\277\320\270\321\201\320\270. "
|
||||||
|
"\320\255\321\202\320\276 \320\276\320\267\320\275\320\260\321\207\320\260"
|
||||||
|
"\320\265\321\202, \321\207\321\202\320\276 \320\262\321\213 \320\275"
|
||||||
|
"\320\265 \320\274\320\276\320\266\320\265\321\202\320\265 \320\267\320\275"
|
||||||
|
"\320\260\321\202\321\214, \320\272\321\202\320\276 \320\265\320\263"
|
||||||
|
"\320\276 \320\275\320\260\320\277\320\270\321\201\320\260\320\273.\n"
|
||||||
|
"\n"
|
||||||
|
"\320\235\320\260\320\266\320\274\320\270\321\202\320\265 \"\320\236"
|
||||||
|
"\321\202\320\274\320\265\320\275\320\260\", \321\207\321\202\320\276"
|
||||||
|
"\320\261\321\213 \320\275\320\265 \320\267\320\260\320\277\321\203\321\201"
|
||||||
|
"\320\272\320\260\321\202\321\214 \320\277\321\200\320\270\320\273\320\276"
|
||||||
|
"\320\266\320\265\320\275\320\270\320\265.",
|
||||||
|
};
|
45
direct/src/plugin/p3dCert_strings.h
Normal file
45
direct/src/plugin/p3dCert_strings.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Filename: p3dCert_strings.h
|
||||||
|
// Created by: rdb (25Mar15)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the revised BSD
|
||||||
|
// license. You should have received a copy of this license along
|
||||||
|
// with this source code in a file named "LICENSE."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
enum LanguageIndex {
|
||||||
|
LI_en, // English
|
||||||
|
LI_nl, // Dutch
|
||||||
|
LI_de, // German
|
||||||
|
LI_es, // Spanish
|
||||||
|
LI_it, // Italian
|
||||||
|
LI_eo, // Esperanto
|
||||||
|
LI_ru, // Russian
|
||||||
|
LI_COUNT,
|
||||||
|
|
||||||
|
LI_default = LI_en
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const char *language_codes[LI_COUNT];
|
||||||
|
extern const unsigned char language_ids[LI_COUNT];
|
||||||
|
|
||||||
|
extern const char *run_title[LI_COUNT];
|
||||||
|
extern const char *cancel_title[LI_COUNT];
|
||||||
|
extern const char *show_cert_title[LI_COUNT];
|
||||||
|
|
||||||
|
extern const char *new_application_title[LI_COUNT];
|
||||||
|
extern const char *no_cert_title[LI_COUNT];
|
||||||
|
extern const char *unverified_cert_title[LI_COUNT];
|
||||||
|
extern const char *expired_cert_title[LI_COUNT];
|
||||||
|
|
||||||
|
extern const char *self_signed_cert_text[LI_COUNT];
|
||||||
|
extern const char *unknown_auth_cert_text[LI_COUNT];
|
||||||
|
extern const char *verified_cert_text[LI_COUNT];
|
||||||
|
extern const char *expired_cert_text[LI_COUNT];
|
||||||
|
extern const char *generic_error_cert_text[LI_COUNT];
|
||||||
|
extern const char *no_cert_text[LI_COUNT];
|
@ -896,6 +896,8 @@ start_p3dpython(P3DInstance *inst) {
|
|||||||
"SYSTEMROOT", "USERPROFILE", "COMSPEC",
|
"SYSTEMROOT", "USERPROFILE", "COMSPEC",
|
||||||
"SYSTEMDRIVE", "ALLUSERSPROFILE", "APPDATA", "COMMONPROGRAMFILES",
|
"SYSTEMDRIVE", "ALLUSERSPROFILE", "APPDATA", "COMMONPROGRAMFILES",
|
||||||
"PROGRAMFILES", "WINDIR", "PROGRAMDATA", "USERDOMAIN",
|
"PROGRAMFILES", "WINDIR", "PROGRAMDATA", "USERDOMAIN",
|
||||||
|
#else
|
||||||
|
"LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG",
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_X11
|
#ifdef HAVE_X11
|
||||||
"DISPLAY", "XAUTHORITY",
|
"DISPLAY", "XAUTHORITY",
|
||||||
|
@ -5055,9 +5055,11 @@ if (RTDIST or RUNTIME):
|
|||||||
if (PkgSkip("FLTK")==0):
|
if (PkgSkip("FLTK")==0):
|
||||||
OPTS.append("FLTK")
|
OPTS.append("FLTK")
|
||||||
TargetAdd('plugin_p3dCert.obj', opts=OPTS, input='p3dCert.cxx')
|
TargetAdd('plugin_p3dCert.obj', opts=OPTS, input='p3dCert.cxx')
|
||||||
|
TargetAdd('plugin_p3dCert_strings.obj', opts=OPTS, input='p3dCert_strings.cxx')
|
||||||
TargetAdd('p3dcert.exe', input='plugin_mkdir_complete.obj')
|
TargetAdd('p3dcert.exe', input='plugin_mkdir_complete.obj')
|
||||||
TargetAdd('p3dcert.exe', input='plugin_wstring_encode.obj')
|
TargetAdd('p3dcert.exe', input='plugin_wstring_encode.obj')
|
||||||
TargetAdd('p3dcert.exe', input='plugin_p3dCert.obj')
|
TargetAdd('p3dcert.exe', input='plugin_p3dCert.obj')
|
||||||
|
TargetAdd('p3dcert.exe', input='plugin_p3dCert_strings.obj')
|
||||||
OPTS=['OPENSSL', 'FLTK', 'X11', 'WINCOMCTL', 'WINSOCK', 'WINGDI', 'WINUSER', 'ADVAPI', 'WINOLE', 'WINSHELL', 'SUBSYSTEM:WINDOWS']
|
OPTS=['OPENSSL', 'FLTK', 'X11', 'WINCOMCTL', 'WINSOCK', 'WINGDI', 'WINUSER', 'ADVAPI', 'WINOLE', 'WINSHELL', 'SUBSYSTEM:WINDOWS']
|
||||||
if GetTarget() == 'darwin':
|
if GetTarget() == 'darwin':
|
||||||
OPTS += ['OPT:2']
|
OPTS += ['OPT:2']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user