大專案中網頁多語系的維護方式

也許在許多專案上我們所說的Multi Language僅有繁體中文、簡體中文和英文,但在比較大型且跨國的專案上,可能會涉及更多的語言,例如:日文、俄文、德文、法文、西班牙文…等等,通常這些軟體內容的翻譯,需要經過更專業的單位來進行,也許這個單位不僅僅需要具備有這些國家的語言能力,也要具備有相當的軟體知識,才能配合當地民情翻譯出正確的文字,這部分往往需要專業的翻譯單位來進行。

而專業的翻譯單位通常並不具有軟體的製作能力,所以在軟體上要如何快速地進行協同作業,就變成一項非常重要的工作,而在許多專案上,我們會讓翻譯單位透過Excel來提供各國語系的翻譯文字,我們則透過軟體進行轉換,將其轉換至軟體能快速讀取的格式,講白一點就是將Excel檔案轉換成XML格式,並提供其他軟體進行讀取。

整體流程會如上圖所示,在拿到一個翻譯社提供所有語系的Excel資料後,我們會進行轉換,將文字轉換成多個XML檔案,並打包成一個ZIP檔讓轉換者進行下載。

今天我們主要來分享上圖藍色部分的處理程序,也就是那一隻轉換程式的結構和做法,我們將轉換程式設計成網頁版本,藉此提升易用性,而轉換程式操作Flow大致如下:

  1. 使用者上傳檔案(限制僅能上傳Excel檔案)
  2. 給出ZIP下載連結(提供使用者下載所有語系的XML檔)

操作上非常簡單,僅有上述這兩個步驟,而程式設計上採用JSP架構其運作邏輯如下:

  1. 檢查上傳檔案的格式、容量及相關資訊
  2. 擷取Excel中第一張工作表(也可以依照工作表名稱擷取)
  3. 將Excel中第一列視為語系標題,並當作存檔名稱(例如:English.xml)
  4. 將剩下來的每一列轉換為該檔案的語系資料,並建立XML檔案
  5. 將所有建立好的XML檔案進行打包(ZIP)
  6. 更新頁面產生ZIP檔下載路徑

在該轉換程式中,另外有利用到下述的JAVA Library:

  1. Apache POI – 處理與解析Excel檔案
  2. DOM4J – 建立XML檔案
  3. Apache Commons – 處理檔案上傳

以下是轉換的程式碼:

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page import="java.io.File"%>
<%@ page import="java.text.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.io.FilenameUtils"%>

<%@ page import="java.util.zip.ZipEntry"%>
<%@ page import="java.util.zip.ZipOutputStream"%>

<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.io.FileOutputStream"%>
<%@ page import="java.io.IOException"%>
<%@ page import="java.io.OutputStreamWriter"%>
<%@ page import="java.nio.charset.Charset"%>

<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>

<%@ page import="org.dom4j.io.OutputFormat"%>
<%@ page import="org.dom4j.io.XMLWriter"%>
<%@ page import="org.dom4j.Document"%>
<%@ page import="org.dom4j.DocumentHelper"%>
<%@ page import="org.dom4j.Element"%>


<%!
    //允許上傳的檔案
  String allowedFileTypes = ".xls";
  
  //建立目錄
    public void newFolder(String folderPath) {
        try {
            String filePath = folderPath;
            filePath = filePath.toString();
            java.io.File myFilePath = new java.io.File(filePath);
            if (!myFilePath.exists()) {
                myFilePath.mkdir();
            }
        }
        catch(Exception e) {
            System.out.println("建立目錄錯誤");
            //e.printStackTrace();
        }
    }
   
   // 轉換XLS為XML的主程式 ; 參數1.欲轉換的Excel工作表編號; 參數2.轉換的檔案路徑與檔名; 參數3.XML儲存的檔案路徑;
   public static String convertSheet(int sheetNumber, String conversionFile, String conversionXMLFilePath) {
     
     String convertStatus = "0"; // 輸出轉換狀態 ; 0 是失敗; 1是成功
     String conversionXMLFileName = null; // XML檔名
     String conversionXMLFile = null; // XML完整路徑與檔名
     
     // 產生儲存XML檔案的資料夾
     File file = new File(conversionXMLFilePath);
     if(!file.exists()){
         file.mkdirs();
     }
     
     // 開始讀取XLS檔案
     HSSFWorkbook book = null;
     try {
       book = new HSSFWorkbook(new FileInputStream(conversionFile));
     } catch (IOException e) {
       System.out.println("IOException : " + e);
     }
     
     HSSFSheet sheet = book.getSheetAt(sheetNumber); // 打開對應編號的工作表
     HSSFRow row = sheet.getRow(0);// 取得工作表的第一列資料
     String cell;
     int totalRows = sheet.getPhysicalNumberOfRows(); // 取得工作表中所有的列數
     int totalCol = row.getPhysicalNumberOfCells(); // 取的工作表中所有的欄數
     
     // 開始建立XML檔並將XLS內容建入
     for (int j = 1; j < totalCol; j++){
       Document document = DocumentHelper.createDocument();
       Element root = document.addElement("root");
       
       for (int i = 0; i < totalRows; i++){
         row = sheet.getRow(i);
         try {
           cell = row.getCell(j).toString();
           if(i==0) {
             conversionXMLFileName = cell;
             conversionXMLFile = conversionXMLFilePath + conversionXMLFileName + ".xml";
           }else {
             root.addElement("row_" + (i+1)).addCDATA(cell);
             /*
             if(sheetNumber == 0) {
               root.addElement("tag_" + (i-1), cell);
             }else {
               root.addElement(xmlKeyboardTitle[(i-1)], cell);
             }
             */
           }
         } catch (NullPointerException e) {
           break;
         }
       }
       
       File storedFile = new File(conversionXMLFile);
       
       if(storedFile.exists())
         storedFile.delete();

       FileOutputStream fos = null;
       OutputStreamWriter osw = null;
       XMLWriter writer = null;
       try {
         storedFile.createNewFile();
         OutputFormat format = OutputFormat.createPrettyPrint();  
               format.setEncoding("utf-8");
               fos = new FileOutputStream(storedFile);
               osw = new OutputStreamWriter(fos, Charset.forName("utf-8"));
               writer = new XMLWriter(osw, format);
               writer.write(document);
       } catch (IOException e) {
         System.out.println("IOException : " + e);
       } finally {
         try {
           if(writer != null) writer.close();
           if(osw != null) osw.close();
           if(fos != null) fos.close();
           convertStatus = "1";
         } catch (IOException e) {
           System.out.println("IOException : " + e);
         }
       }
     }
     return convertStatus; // 回覆轉換狀態
   }
   
   List<String> filesListInDir = new ArrayList<String>();
   
   public void zipDirectory(File dir, String zipDirName) {
     
     filesListInDir = new ArrayList<String>();
     
        try {
          
            populateFilesList(dir);
            //now zip files one by one
            //create ZipOutputStream to write to the zip file
            FileOutputStream fos = new FileOutputStream(zipDirName);
            ZipOutputStream zos = new ZipOutputStream(fos);
            for(String filePath : filesListInDir){
                System.out.println("Zipping "+filePath);
                //for ZipEntry we need to keep only relative file path, so we used substring on absolute path
                ZipEntry ze = new ZipEntry(filePath.substring(dir.getAbsolutePath().length()+1, filePath.length()));
                zos.putNextEntry(ze);
                //read the file and write to ZipOutputStream
                FileInputStream fis = new FileInputStream(filePath);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
                zos.closeEntry();
                fis.close();
            }
            zos.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
   private void populateFilesList(File dir) throws IOException {
        File[] files = dir.listFiles();
        for(File file : files){
            if(file.isFile()) filesListInDir.add(file.getAbsolutePath());
            else populateFilesList(file);
        }
    }
  
%>

<%

String messageReturn = "";
  
try{
  
    request.setCharacterEncoding("utf-8");
    DiskFileUpload fileUpload = new DiskFileUpload();
  List<FileItem> fileItems = fileUpload.parseRequest(request);
  FileItem fileItem = fileItems.get(0);
  
    //原始上傳檔案名稱
  String originalFileName = fileItem.getName();
    //out.print("originalFileName : " + originalFileName + "<br>");
    
  if (originalFileName != null && !"".equals(originalFileName)) {

        originalFileName = FilenameUtils.getName(originalFileName);
        String extension = FilenameUtils.getExtension(originalFileName);
        
    //判斷檔案格式是否允許
    //out.print("extension : " + extension + "<br>");
        if (allowedFileTypes.indexOf(extension.toLowerCase()) != -1) {
            String filePath = this.getServletContext().getRealPath(request.getRequestURI().substring(request.getContextPath().length()));
            String savePath = new File(filePath).getParent() + "/upload";
          //out.println("savePath = " + savePath + "<br>");
      newFolder(savePath);
      
          String savePathAndName = savePath + "/" + originalFileName;
            //out.print(savePathAndName);
      
          File f = new File(savePathAndName);
          if(!f.exists()){
            f.createNewFile();
          }
          fileItem.write(f);
            
            //messageReturn += "File path : " + savePath + "<br>";
            
             String xmlSavePath = savePath + "/xml/";
             //messageReturn += "xmlSavePath : " + xmlSavePath + "<br>";
            
            if("1".equals(convertSheet(0, savePathAndName , xmlSavePath))){
              messageReturn += "File converted successfully.<br>";
        }else{
          messageReturn += "File conversion failed.<br>";
        };
        
        /*
        xmlSavePath = savePath + "/xml/keyboard/";
        
        if("1".equals(convertSheet(1, savePathAndName , xmlSavePath))){
              messageReturn += "Keyboard sheet conversion succeeded.<br>";
        }else{
          messageReturn += "Keyboard sheet conversion fail.<br>";
        };
        */
      
        java.io.File myDelFile = new java.io.File(savePath + "/All.zip");
        myDelFile.delete();
        
        zipDirectory(new File(savePath + "/xml/"), savePath + "/All.zip");
        
        messageReturn += "<a href='upload/All.zip' target='_blank'>Download Link</a><br>";

        } else {
          messageReturn += "上傳錯誤 : 上傳的檔案不能是" + extension + ",僅允許xls格式<br>";
        }
    }
}catch(Exception e){
  //e.printStackTrace();
}

%>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>AIOT CC Multi-Language Convertion Tool</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <style>
        *{
            font-family: 微軟正黑體;
        }
        h2{
            text-align: center;
        }
        .marginBottom20{
            margin-bottom: 20px;
        }
        #uploadBtn{
            margin: auto;
            display: block;
        }
        #messageDiv{
          color: red;
          text-align:center;
        }
    </style>
</head>

<body>

    <div class="container">
        <h2 class="marginBottom20">AIOT CC Multi-Language Convertion Tool</h2>
        <div class="form-group text-center">
          <form name="upload" enctype="multipart/form-data" method="post" action="index.jsp" onsubmit="return check_select()">
            <input type="file" name="file" id="file" size="60" maxlength="20" placeholder="*.xls" class="marginBottom20">
            <input id="uploadBtn" type="submit" value="轉換" class="btn btn-primary">
        </form>
      </div>
      <div id="messageDiv"><% out.print(messageReturn); %></div>
    </div>
    
</body>

</html>
<script>
    function check_select(form) {
        if (file.value == "") {
            alert("請選擇檔案");
            return false;
        } else {
            // document.getElementById("uploadBtn").disabled = true;
            //document.getElementById("msgDiv").innerHTML = "檔案上傳中,請稍候";
            return true;
        }
    }
</script>

You may also like...

83,328 Responses

  1. Superb piece on the expansion of internet-based gaming.
    As an individual who is passionate about this domain, I recognize the
    comprehensive analysis you shared.

    If those of you are looking for a alternative platform to try out, I’ve stumbled upon a platform known as BetCryptoCasino.net.
    It offers a wide range of casino titles and sports wagering options, utilizing digital currencies
    for fast and reliable financial operations.

    Please investigate it and see if it suits your preferences and needs.
    Enjoy!

    My web site – Digital currency gambling (https://comfortrent.ru)

  2. Отличный сатй! Всем рекомендую!продать золото

  3. You’ll Never Guess This Double Glazing Windows
    Near Me’s Tricks double glazing windows near Me

  4. Fantastic Feedback to Digital Diary Remark

    Wonderful post! I’m really appreciating the content on this platform.
    Have you before deliberated regarding procuring in web-based casino gaming activities?
    Evolution is a excellent website providing a expansive array
    of exceptional authentic table manager products. The total encounter is so compelling and
    true, it’s like you’re directly within the casino in the genuine wagering.

    In the event you’re keen on the topic of having a go at that out, I’d be
    ecstatic to give my referral online location. The Evolution Gaming Platform has a
    superb introductory bonus for new latest gamblers.
    It surely undoubtedly advantageous exploring too on the condition you’re seeking a fresh virtual casino games experience.

    Gratitude once more in relation to the excellent internet log information. Retain going the wonderful efforts!

    Feel free to visit my web site :: gambling partnerships

  5. The Little Known Benefits Of How To Get A Diagnosis For ADHD where can i get diagnosed For add (http://thankyou.eoapps.co.kr/bbs/board.php?bo_table=free&wr_id=179117)

  6. Malpractice Settlement’s History History Of Malpractice Settlement Malpractice Lawyers

  7. online slots表示:

    Wow, this was a really instructive and extensive article on the
    domain of crypto casinos ! As someone who’s been delving into the world
    of crypto asset-based staking , I really
    admire you exploring all the important qualities – from the top virtual
    betting houses with generous rewards and high-roller features ,
    to the emergence of no-KYC preferences for greater protection .
    It’s fantastic to see how this realm is unceasing evolving to address the requirements of the burgeoning enthusiasm.
    Thank you for assembling such a comprehensive and beneficial content – it’s
    precisely the nature of content I was wanting to
    understand the captivating digital gambling establishment environment .
    Thank you again !

    My web page online slots

  8. I would like to thank you for the efforts you have put in writing this site. I am hoping to view the same high-grade content from you in the future as well. In fact, your creative writing abilities has encouraged me to get my own website now 😉

  9. Kumar oynamak icin en iyi secim Sweet bonanza

  10. 9 . What Your Parents Taught You About Upvc Window Repairs Near Me upvc window repairs Near me

  11. En iyi kumarhanelerde sans?n?z? deneyin Sweet bonanza

  12. seo 마케팅表示:

    Seo Tips – Links And Keywords seo 마케팅

  13. The 10 Most Terrifying Things About Boat Accident Attorneys
    boat accident attorneys

  14. “NextSpin Slot” เป็น พื้นที่การ ทายผล
    ออนไลน์ที่มี ความฮิตและเป็นที่ ต้องการมาก
    อย่างมากในปัจจุบัน
    พื้นที่นี้มีให้บริการหลากหลาย เกมคาสิโนที่น่าตื่นเต้นและมีความ หลากหลายรูปแบบตั้งแต่ เกมสล็อตรูปแบบอิเล็กทรอนิกส์ เกมบนโต๊ะ และเกมอื่นๆ ที่ผู้เล่นสามารถ เพลิดเพลินไปกับการ
    ลงทุน ได้อย่างเต็มที่

    สิ่งที่โดดเด่น ของ “NextSpin Slot” คือ ลักษณะการออกแบบ ที่ทันสมัยและ ผู้มาใช้บริการมี การสัมผัส ที่ดี ระบบ การ ใช้บริการ เกมและการ ทำธุรกรรมการเงิน เงินเป็นไปอย่าง
    ทันตาเห็น และ เชื่อถือได้ นอกจากนี้ ยังมี กิจกรรม
    และ สิทธิประโยชน์ มากมายที่ผู้เล่นสามารถ ใช้ประโยชน์ ได้ เพื่อ ปรับปรุงให้ดีขึ้น โอกาสในการ ได้รางวัล และ ปรับปรุงให้ดีขึ้น ความ เพลิดเพลิน ในการ ท้าทาย

    ด้วยฐานลูกค้า ที่กว้างขวางและ ความสามารถหลากหลาย ตัวเลือก “NextSpin Slot” จึงเป็น ตัวเลือกที่หลากหลาย ที่ เลิศ สำหรับผู้ที่ต้องการ ประสบการณ์การ
    วางเดิมพัน ออนไลน์ที่ดีเยี่ยม ไม่ว่าคุณจะ
    เข้ามาเป็น ผู้เล่น ไม่ชำนาญหรือ ผู้ใช้บริการ ที่มี ความเชี่ยวชาญดีคุณจะ ได้เผชิญกับความ ความบันเทิงและความตื่นเต้น
    ที่ เหนือชั้น ด้วยความ เชื่อมั่น ในการ ให้ความช่วยเหลือ และ การดูแลความปลอดภัยของ ความลับ”NextSpin Slot” จึงเป็น ทางเลือก
    ที่ น่าลองเสี่ยง สำหรับ ผู้เล่น ออนไลน์

    ด้วยการที่ “NextSpin Slot” มีชื่อเสียงและเป็นที่นิยมมาก
    ผู้เล่นจึงสามารถวางใจได้ ในการ เล่น บนแพลตฟอร์มนี้ ซึ่งจะ เอื้อ
    ให้การ พนัน ของผู้เล่นราบรื่น รวมถึงช่วยเพิ่ม ความสุข ในการ เดิมพัน
    ได้อย่างมาก

    โดยทั่วไป “NextSpin Slot” ถือเป็นแพลตฟอร์ม การ ลงทุน ออนไลน์ที่ได้รับความนิยม อย่างมากในปัจจุบัน ด้วยคุณสมบัติที่ ยอดเยี่ยม ในด้านต่างๆ รวมถึงการออกแบบ ที่ดี ระบบ การจัดการการเงินที่รวดเร็ว รวมถึงโปรโมชั่น ที่น่าสนใจ ทำให้ “NextSpin Slot” เป็นตัวเลือก ที่ ชั้นนำที่ผู้เล่นควรให้ความสนใจ อย่างแน่นอน

    โดยเฉพาะอย่างยิ่ง สำหรับผู้เล่นที่ต้องการ การเพลิดเพลิน ในการเดิมพันออนไลน์ที่ ยอดเยี่ยม “NextSpin Slot” จะเป็นตัวเลือก ที่น่าสนใจ อย่างยิ่ง ไม่ว่าคุณจะเป็นผู้เล่น ไม่มีประสบการณ์ หรือ ผู้ใช้บริการที่ชำนาญ “NextSpin Slot”
    ก็พร้อมที่จะ จัดเตรียม ประสบการณ์การเดิมพัน ที่ สุดยอด ให้กับคุณอย่างแน่นอน

    ในภาพรวม “NextSpin Slot” จึงเป็นแพลตฟอร์ม การ เล่น ออนไลน์ที่
    เป็นที่นิยมสูงอย่างมาก ด้วยคุณภาพ ความมั่นคง ที่โดดเด่น รวมถึง ความสมบูรณ์แบบ ของเกมและโปรโมชันต่างๆ ที่น่าสนใจ ทำให้ “NextSpin Slot” เป็น แหล่งพนัน ที่
    ไม่ควรพลาดสำหรับนักพนันออนไลน์ที่ต้องการ ความท้าทาย ที่ ไม่เหมือนใคร

    Look at my page :: คาสิโนออนไลน์ไม่ต้องฝากเงิน (http://www.webwiki.de)

  15. kaymell.uk表示:

    5 Slots Casino Real Money Projects For Every Budget kaymell.uk

  16. Lynne表示:

    15 Of The Best Documentaries On Double Glazed Window Repair window repairs near me (Lynne)

  17. Upvc Door Repairs Near Me Tools To Make Your Everyday Lifethe Only
    Upvc Door Repairs Near Me Trick Every Person Should Be Able To
    Upvc Door Repairs Near Me (https://Biowiki.Clinomics.Com/Index.Php/10_Things_That_Your_Family_Taught_You_About_Window_Doctor_Near_Me)

  18. Warmly fellow viewer ,

    I unearthed the thoughts shared in this blog post to be
    most enlightening . The writer’s skill of the topic is
    undoubtedly commendable.

    If you are aspiring to a exhilarating and fruitful cyber
    gaming venture , I would enthusiastically convince
    you to delve into the options of VIVARO CASINO.

    With its broad diversity of stimulating amusements
    , copious rewards , and hassle-free system , VIVARO CASINO offers an one-of-a-kind
    gaming experience that fits both beginner and experienced aficionados
    correspondingly .

    I persuade you to explore VIVARO CASINO and unveil the buzz that is ready to be experienced
    you. I am firmly believe you will regard the expedition to be exceptionally
    fulfilling .

    Cordial regards

    My homepage Casino software

  19. выездной ремонт стиральных машин http://centr-remonta-stiralnyh-mashin.ru/ .

  20. Google Genius表示:

    Search Engine Optimization Tutorial Part 3 – Getting Backlinks For Link Popularity Google Genius

  21. Terminated Reading a Blog Post: A Formal Commentary to the Comment Section and an Invitation to Join “KING855”

    ‘After thoroughly scrutinizing the blog post,
    I would like to offer the following commentary
    to the forum.

    Your opinions on the theme were quite engaging .
    I was in alignment with a number of the claims you articulated.

    It is encouraging to see such an dynamic exchange unfolding.

    If you are curious in further examining this theme, I would warmly
    encourage you to join the “KING855” network
    . In that space, you will have the chance to interact with like-minded
    members and delve deeper into these intriguing topics .

    I am confident your participation would
    be a significant enrichment to the discussion .

    Thank you remarks, and I anticipate the possibility of
    continuing this stimulating exchange .

    Review my webpage – online casino content marketing

  22. What’s The Job Market For Double Glazed Repairs Near Me Professionals Like?

    double glazed repairs near me (yealinkkorea.net)

  23. Absorbing and insightful scrutiny of the issue. Your analysis was in-depth
    and well-supported, presenting participants with a extensive understanding of the fundamental subjects
    at fingertips.

    I may be delighted to communicate further on this area.

    If you agree, I would cordially invite you to participate in us on the SBOBET ecosystem,
    whereupon we can sustain our debate in a further engaging realm.

    Stop by my web-site; online casino banking solutions

  24. срочно починить стиральную машину https://www.centr-remonta-stiralnyh-mashin.ru .

  25. Xie xie atas makluman yang menakjubkan dalam pos blog itu
    Saya teruja untuk memahami lebih lanjut tentang perkembangan terkini dalam dunia taruhan
    crypto . Saya mengundang anda untuk menyusuri Kasino Crypto
    di mana anda dapat menikmati pengalaman aktiviti
    judi virtual yang terjaga dan teratur Platform ini menawarkan pelbagai aksi mengasyikan serta proses
    pengisian dan pengeluaran yang mudah . Saya
    yakin ia akan menjadi platform yang ideal untuk
    anda menyiasat peluang dalam aksi judi digital asset.
    Sila menemui kami untuk keterangan lanjut dan penyertaan .
    Sekian dengan terima kasih

  26. 5611432.xyz表示:

    Why You Should Be Working On This Programming Car Keys 5611432.xyz

  27. Say “Yes” To These 5 Asbestos Attorneys Tips http://www.cassylawn.top

  28. Guide To Upvc Windows Near Me: The Intermediate
    Guide Towards Upvc Windows Near Me upvc windows near
    Me; https://wiki.mine-hoster.de,

  29. Brandonvax表示:

    Звон Колокольцева
    Лайф-из-Гуд
    Поздравляем вас, гражданин министр, соврамши!
    Выступая прошлой осенью в Совете Федерации, министр внутренних дел Владимир Колокольцев рассказывал, о так называемом уголовном деле «Лайф-из-Гуд» – «Гермес» – «Бест Вей», обещал миллиарды рублей ущерба и десятки тысяч потерпевших. Пресс-служба МВД под руководством его боевой подруги Ирины Волк заявила о том, что вскрыта деятельность крупнейшей в истории России финансовой пирамиды.

    Однако в уголовном деле, расследованном или, вернее сказать, изготовленном ГСУ питерского главка МВД, которое в феврале начал рассматривать Приморский районный суд Санкт-Петербурга, 282 млн рублей ущерба и 221 лицо, признанное следствием потерпевшим: никаких миллиардов и десятков тысяч потерпевших.

    Министр и его Волк публично солгали – на основе информации, переданной замначальника ГСУ руководителем следственной группы полковником юстиции А.Н. Винокуровым, фактически даже руководившей СГ его заместительницей майором, а затем подполковником юстиции Е.А. Сапетовой по материалам, состряпанным опером УЭБиПК питерского главка МВД майором полиции А.Ю. Машевским, при попустительстве (или соучастии?) начальника ГСУ Негрозова и замначальника Следственного департамента федерального министерства Вохмянина. Полковник и подполковник с примерно пятого-шестого уровня иерархии МВД виляет генералом полиции Российской Федерации, постоянным членом Совета безопасности России – это позор для государства.
    Так называемые потерпевшие и реально пострадавшие
    Большинство «потерпевших» на суде заявляют суммы около 1–2 млн рублей, при этом в ходе судебного следствия выясняется, что они, как правило, получали немалый доход, причем, они еще и налоговые/валютные преступники, так как этот доход не декларировали. Среди «потерпевших» есть граждане, заявляющие смехотворные суммы в 50–70 тыс., то есть количество потерпевших специально накручивалось следствием. И даже с этим накручиванием удалось набрать так мало – учитывая, что у «Гермеса», по данным самого же следствия, более 200 тыс. клиентов в России, а в кооперативе «Бест Вей» – около 20 тыс. пайщиков.

    То есть большинство и клиентов «Гермеса», и пайщиков кооператива не считают себя потерпевшими от деятельности этих организаций.

    Судя по тысячам обращений во все инстанции, нескольким волнам митингов, прокатившихся по России, они считают себя потерпевшими от деятельности органов внутренних дел.

    Ведь именно завербованный питерским УЭБиПК сисадмин российской платежной системы «Гермеса» Набойченко заблокирован и разгромил в феврале 2022 года эту платежную систему, повесив на сайте дисклеймер: «Обращайтесь в правоохранительные органы», что на месяцы прекратило вывод средств. Именно действия правоохранительных органов в отношении компании до и после затруднили вывод средств. Дело в том, что для вывода средств многими использовался механизм p2p, позволяющий не платить комиссию, то есть для вывода средств нужно, чтобы кто-то вносил средства (что, понятно, резко сократилось из-за уголовного дела) и происходил обмен. Однако этот способ не единственный, вывод средств так или иначе осуществляется.

    Тысячи пайщиков кооператива тем более не считают себя потерпевшими от его деятельности – потому что именно правоохранительные органы воспрепятствовали приобретению недвижимости с помощью кооператива, а она из-за более чем двухлетнего ареста его счетов, на которых около 4 млрд рублей, не может быть приобретена по прежней цене.

    Именно правоохранительные органы прямо запрещают выплаты пайщикам кооператива, решившим забрать свой пай, – даже по исполнительным листам судов. И клиентам «Гермеса», и пайщикам кооператива правоохранительными органами нанесен колоссальный ущерб – и материальный, и моральный, который они намерены взыскать с государства.
    «Следователи»-преступники должны сидеть в тюрьме
    Весьма скромный результат следствия МВД был достигнут откровенно преступным путем.

    1. Некоторые из преступлений следствия были фактически признаны судами. 1 декабря прошлого года Приморский районный суд города Санкт-Петербурга признал незаконным, нарушающим УПК фактический отказ кооперативу в ознакомлении с материалами уголовного дела.При рассмотрении дела в суде выяснилось, что следственная группа ГСУ питерского главка МВД, формально руководимая замначальника ГСУ полковником юстиции А.Н. Винокуровым, а фактически – подполковником юстиции Е.А. Сапетовой, подделала документы. Автор подделки – Сапетова – еще в феврале была уволена из ГСУ «по собственному желанию».

    Уличенная адвокатами кооператива в нарушении УПК, следственная группа составила письмо об удовлетворении ходатайства задним числом и попыталась представить дело так, что кооператив не получил письмо по своей вине. Ложь была выявлена в том числе и с помощью системы электронного документооборота питерского главка МВД.

    2. Подделка документов была вынужденным преступлением для сокрытия более серьезного: незаконного содержания под стражей. Следственная группа грубо нарушила права гражданских истцов и ответчиков, потому что без этого нарушения она не успела за 30 суток до истечения предельного срока содержания четверых обвиняемых под стражей начать ознакомление обвиняемых с материалами дела –а это было единственное основание продления им срока содержания под стражей свыше предельного.

    Следственная группа из-за спешки даже толком не смогла завершить следственные действия, незаконно вела параллельное расследование по «резервному» делу, но позднее, отбросив стыд, из-за отсутствия материала для составления «нужного» обвинительного заключения, незаконно продолжила расследование «основного» дела, в том числе проводила следственные действия, которые, согласно УПК, невозможны после начала ознакомления обвиняемых с материалами дела. Все эти ухищрения были необходимы для того, чтобы ни в коем случае не выпускать обвиняемых и продолжать держать их в заложниках.

    3. Де-факто происходит уголовное наказание неосужденных людей – четверо подсудимых уже второй год сидят в тюрьме. При этом наказываются явно ни в чем неповинные люди – технические сотрудники «Лайф-из-Гуд»: даже если предположить, что действительно работала пирамида – что опровергается показаниями свидетелей самого обвинения, которые сообщают суду, что компания «Гермес» хорошо работала, они были довольны получаемым доходом, и проблемы начались после того, как российская платежная система компании была обрушена завербованным полицией петербургским сисадмином компании Набойченко. Все подсудимые – технические сотрудники компании «Лайф-из-Гуд» и ни к каким управленческим решениям отношения никогда не имели. Их взяли в заложники для того, чтобы они дали показания на руководство компании.

    4. Еще одно преступление – заведомо подложное постановление руководителя следственной группы А.Н. Винокурова о привлечении кооператива «Бест Вей» в качестве гражданского ответчика на 16 млрд рублей, тогда как сумма ущерба в уголовном деле –282 млн, и в деле нет ни одного искового заявления – даже на 100 рублей.

    5. Следствие стимулировало двух особенно активных так называемых потерпевших написать заявления о моральном ущербе на миллиард (!) рублей каждое – исключительно для ложного обоснования ареста активов кооператива, но понятно, что это ничтожные документы, так как моральный ущерб во всех случаях, не связанных с причинением смерти, присуждается российскими судами в размере не более десятков тысяч рублей.

    6. Ни один из «потерпевших» не доказал обоснованность своих претензий в гражданском суде. При этом арестованы активы кооператива почти на 4 млрд рублей и активы частных лиц на такую же сумму. Это не что иное, как попытка захвата активов при участии органов внутренних дел некой заинтересованной группой клиентов «Гермеса» – необязательно из числа «потерпевших», то есть коррупционное преступление, которое упорно игнорирует ГУСБ МВД.

    Механизм для такого захвата есть – это передача средств под управление Федерального общественно-государственного фонда по защите прав вкладчиков и акционеров. Понятно, почему не ограничиваются активами подсудимых и обвиняемых: этого недостаточно для удовлетворения аппетитов тех, кто стоит за заказным уголовным делом. И понятно, почему одно юридическое лицо – кооператив «Бест Вей» – незаконно пытаются привлечь к ответственности за другое – компанию «Гермес»: активы «Гермеса» – за рубежом.

    7. Следствие, а теперь и прокуратура совершают еще одно преступление: незаконно удерживает средства пайщиков кооператива, отказываясь их вернуть, то есть совершают хищение.
    Министр, управляемый мафией
    Итак, Колокольцев публично солгал Совету Федерации, выдумав пирамиду, выдумав многомиллиардный ущерб и десятки тысяч пострадавших, он – некомпетентный руководитель, абсолютно ведомый своей камарильей, стремящейся создавать громкие пиар-истории на пустом месте и с коррупционной выгодой для себя. Он вызвал социальный протест десятков тысяч пайщиков кооператива «Бест Вей» и клиентов компании «Гермес» и членов их семей – в большинстве своем представителей социально незащищенных слоев населения, на годы лишенных возможности пользоваться своими деньгами и приобрести недвижимость, на которую они собрали средства, – в том числе десятков участников СВО. Министр вредит в тылу тем, кто защищает страну на фронте.

    Глава МВД находится под влиянием или даже контролем давно ставшей притчей во языцех питерской полицейской мафии. Ликвидация этой мафии, как и ликвидация преступной, коррупционной, вредящей социально-политической стабильности системы управления МВД, со стороны Колокольцева является важнейшей государственной задачей.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。