Please write Russian translation of the text . Replace with name Ivan.Also write lust of difficult vocabulary words with meaning in English and under in Russian language.prepare a handbook colorful pdf.
~/
mkdir -p "/tmp/workspace/russian-job-interview-handbook/src" "/tmp/workspace/russian-job-interview-handbook/output" && fc-match 'DejaVu Sans' | head -1 && ls -la "/tmp/workspace/attachments/fd67b510-559e-4216-be7a-4f9c8fa68e6b"
~/russian-job-interview-handbook/src/create_handbook.py
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor, white, black
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.utils import ImageReader
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.lib import colors
import os
OUT = '/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf'
IMG = '/tmp/workspace/attachments/fd67b510-559e-4216-be7a-4f9c8fa68e6b/1000298812.jpg'
FONT_DIR='/usr/share/fonts/truetype/noto'
REG=FONT_DIR+'/NotoSans-Regular.ttf'
BOLD=FONT_DIR+'/NotoSans-Bold.ttf'
if not os.path.exists(REG):
REG='/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf'; BOLD='/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf'
pdfmetrics.registerFont(TTFont('Noto', REG))
pdfmetrics.registerFont(TTFont('NotoBold', BOLD))
W,H=A4
M=42
NAVY=HexColor('#193B63'); BLUE=HexColor('#2C74B3'); SKY=HexColor('#DFF3FF'); MINT=HexColor('#DDF6E8'); PINK=HexColor('#FCE1EE'); GOLD=HexColor('#F7C35F'); INK=HexColor('#243447'); GREY=HexColor('#667085'); LIGHT=HexColor('#F7FAFC')
c=canvas.Canvas(OUT,pagesize=A4)
c.setTitle('English-Russian Job Interview Handbook')
def rect(x,y,w,h,color,r=12):
c.setFillColor(color); c.roundRect(x,y,w,h,r,stroke=0,fill=1)
def text(x,y,s,font='Noto',size=11,color=INK):
c.setFillColor(color); c.setFont(font,size); c.drawString(x,y,s)
def wrap(s,font,size,maxw):
words=s.split(); lines=[]; line=''
for word in words:
test=(line+' '+word).strip()
if stringWidth(test,font,size)<=maxw: line=test
else: lines.append(line); line=word
if line: lines.append(line)
return lines
def para(x,y,s,maxw,size=11,leading=15,font='Noto',color=INK):
c.setFillColor(color); c.setFont(font,size)
for line in wrap(s,font,size,maxw):
c.drawString(x,y,line); y-=leading
return y
def footer(page):
c.setStrokeColor(HexColor('#D6E2EE')); c.line(M,29,W-M,29)
text(M,16,'English ↔ Russian learning handbook',size=8,color=GREY)
c.setFont('NotoBold',8); c.setFillColor(GREY); c.drawRightString(W-M,16,f'{page} / 3')
def page1():
rect(0,H-168,W,168,NAVY,0)
# bubbles
c.setFillColor(HexColor('#315D8B')); c.circle(W-86,H-54,46,fill=1,stroke=0); c.setFillColor(GOLD); c.circle(W-67,H-42,11,fill=1,stroke=0)
text(M,H-55,'JOB INTERVIEW',font='NotoBold',size=13,color=GOLD)
text(M,H-97,'English → Russian',font='NotoBold',size=29,color=white)
text(M,H-127,'Dialogue, translation and key vocabulary',size=13,color=HexColor('#D9EDFF'))
# visual
try:
c.drawImage(IMG,M,H-330,150,142,mask='auto',preserveAspectRatio=True,anchor='c')
c.setStrokeColor(PINK); c.setLineWidth(3); c.roundRect(M,H-330,150,142,10,stroke=1,fill=0)
except: pass
rect(215,H-328,338,140,SKY)
text(235,H-220,'Learning goal',font='NotoBold',size=15,color=NAVY)
para(235,H-247,'Practise a polite job-interview conversation. The applicant name has been changed from Simon to Ivan.',294,11,16)
y=H-380
text(M,y,'Dialogue at a glance',font='NotoBold',size=18,color=NAVY); y-=25
cards=[('1','Greeting','Поздороваться и представиться'),('2','About yourself','Рассказать о себе'),('3','Experience','Объяснить опыт работы'),('4','Availability','Сказать, когда можете начать')]
for n,title,ru in cards:
rect(M,y-46,W-2*M,42, LIGHT if int(n)%2 else MINT,9)
rect(M+9,y-38,26,26,BLUE if int(n)%2 else HexColor('#2B9B75'),7)
text(M+18,y-30,n,'NotoBold',11,white)
text(M+48,y-22,title,'NotoBold',12,NAVY)
text(M+200,y-22,ru,size=11,color=INK)
y-=53
rect(M,85,W-2*M,56,PINK,10)
text(M+15,116,'Tip',font='NotoBold',size=12,color=NAVY)
text(M+15,96,'Read the English aloud first, then use the Russian translation to check meaning.',size=10,color=INK)
footer(1)
c.showPage()
def page2():
rect(0,H-76,W,76,NAVY,0)
text(M,H-46,'Bilingual dialogue',font='NotoBold',size=22,color=white)
text(W-190,H-45,'Ivan’s interview',font='NotoBold',size=11,color=GOLD)
dialogue=[
('Ivan','Good morning. I’m Ivan Jones.','Доброе утро. Меня зовут Иван Джонс.'),
('Mr Andrews','Nice to meet you, Ivan. Please have a seat.','Рад познакомиться, Иван. Пожалуйста, присаживайтесь.'),
('Ivan','Thank you.','Спасибо.'),
('Mr Andrews','So, Ivan, tell me a little about yourself.','Итак, Иван, немного расскажите о себе.'),
('Ivan','Well, I’m 18 years old, I’m a student, and I’m looking for a part-time job to help pay for university.','Мне 18 лет, я студент и ищу работу на неполный рабочий день, чтобы помочь оплачивать учёбу в университете.'),
('Mr Andrews','I see. Why do you think you’ll be a good shop assistant?','Понятно. Почему вы считаете, что будете хорошим продавцом-консультантом?'),
('Ivan','Well, I think I’m hard-working and honest. People also say I’m friendly and helpful.','Я думаю, что я трудолюбивый и честный. Люди также говорят, что я дружелюбный и готов помочь.'),
('Mr Andrews','Do you have any experience in this type of work?','У вас есть опыт работы такого типа?'),
('Ivan','Yes. I worked in a surf shop last summer. Here’s a letter of recommendation.','Да. Прошлым летом я работал в магазине товаров для сёрфинга. Вот рекомендательное письмо.'),
('Mr Andrews','Oh, that’s great! If we offer you the job, when can you start?','О, это отлично! Если мы предложим вам эту работу, когда вы сможете начать?'),
('Ivan','I can start immediately.','Я могу начать немедленно.'),
('Mr Andrews','OK, Ivan, I think that’s all I need to know. I’ll be in touch.','Хорошо, Иван, думаю, это всё, что мне нужно знать. Я с вами свяжусь.'),
('Ivan','Thank you very much for your time.','Большое спасибо за ваше время.')]
y=H-102
for i,(speaker,en,ru) in enumerate(dialogue):
# calculate height
el=wrap(en,'Noto',9.2,390); rl=wrap(ru,'Noto',9.2,390); h=25+len(el)*12+len(rl)*12
if y-h<48: break
rect(M,y-h,W-2*M,h, SKY if speaker=='Ivan' else LIGHT,8)
badge=BLUE if speaker=='Ivan' else HexColor('#5D7085')
rect(M+8,y-27,78,19,badge,6)
text(M+15,y-21,speaker,'NotoBold',8.6,white)
yy=y-16
c.setFont('Noto',9.2); c.setFillColor(INK)
for line in el: c.drawString(M+96,yy,line); yy-=12
c.setFillColor(HexColor('#315D63'))
for line in rl: c.drawString(M+96,yy,line); yy-=12
y-=h+5
footer(2); c.showPage()
def page3():
rect(0,H-82,W,82,HexColor('#207C69'),0)
text(M,H-49,'Difficult vocabulary',font='NotoBold',size=22,color=white)
text(M,H-69,'English meaning, then Russian translation',size=10,color=HexColor('#D6FFF3'))
vocab=[
('have a seat','sit down','присаживаться'),('part-time job','work for fewer hours than a full-time job','работа на неполный рабочий день'),('shop assistant','a person who helps customers in a shop','продавец-консультант'),('hard-working','willing to work hard','трудолюбивый'),('honest','truthful; not dishonest','честный'),('friendly','kind and pleasant to others','дружелюбный'),('helpful','willing to give help','готовый помочь'),('experience','knowledge or skill gained from doing work','опыт'),('surf shop','a shop that sells surfing equipment or clothing','магазин товаров для сёрфинга'),('letter of recommendation','a letter that says someone is suitable for work','рекомендательное письмо'),('offer someone a job','ask someone to take a job','предложить кому-либо работу'),('immediately','at once; without waiting','немедленно'),('be in touch','contact someone later','связаться')]
y=H-108
for idx,(word,meaning,ru) in enumerate(vocab,1):
h=47
if y-h<68: break
rect(M,y-h,W-2*M,h, MINT if idx%2 else LIGHT,8)
rect(M+9,y-33,25,25,GOLD,7); text(M+17,y-25,str(idx),'NotoBold',9,NAVY)
text(M+46,y-18,word,'NotoBold',10.2,NAVY)
text(M+46,y-33,meaning,size=8.8,color=INK)
c.setFillColor(HexColor('#19705D')); c.setFont('NotoBold',9.2); c.drawRightString(W-M-12,y-25,ru)
y-=52
rect(M,48,W-2*M,43,PINK,10)
text(M+14,72,'Mini practice:',font='NotoBold',size=10,NAVY)
text(M+14,57,'Say: “I am hard-working, honest, friendly and helpful.”',size=9.2,color=INK)
footer(3); c.showPage()
page1(); page2(); page3(); c.save()
print(OUT)
python "/tmp/workspace/russian-job-interview-handbook/src/create_handbook.py" && ls -lh "/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf"
~/russian-job-interview-handbook/src/create_handbook.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/russian-job-interview-handbook/src/create_handbook.py'
python "/tmp/workspace/russian-job-interview-handbook/src/create_handbook.py" && python -c "from pypdf import PdfReader; p=PdfReader('/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf'); print('pages=',len(p.pages)); print('page2chars=',len(p.pages[1].extract_text()))" && ls -lh "/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf"
fc-match -v 'Noto Sans' | sed -n '1,12p'
fc-match -f '%{file}\n' 'Noto Sans' && fc-match -f '%{file}\n' 'Noto Sans:style=Bold'
~/russian-job-interview-handbook/src/create_handbook.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/russian-job-interview-handbook/src/create_handbook.py'
python "/tmp/workspace/russian-job-interview-handbook/src/create_handbook.py" && python -c "from pypdf import PdfReader; p=PdfReader('/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf'); print('pages=',len(p.pages)); print('page2 chars=',len(p.pages[1].extract_text() or '')); print('page3 chars=',len(p.pages[2].extract_text() or ''))" && ls -lh "/tmp/workspace/russian-job-interview-handbook/output/English_Russian_Job_Interview_Handbook.pdf"
English Russian Job Interview Handbook
PDF Document · PDF